原文链接:http://blog.csdn.net/shanyongxu/article/details/46501683

构造函数

所谓的构造函数就是和类名重名的且没有返回值的方法.

class Person

{

public Person()//构造函数

{

}

}

一般情况下,如果没有提供构造函数,编译器会在后台创建一个默认的无参数的构造函数.这是一个非常基本的构造函数,他只能吧所有的成员字段初始化为标准的默认值(例如,引用类型为空引用,数值数据类型为0,bool为false).

构造函数可以重载,只要他们的签名不同即可.

class Person

{

public Person()//构造函数

{

}

public Person(int number)

{

}

}

但是有一点需要注意的是,如果提供了带参数的构造函数,编译器就不会自动的提供默认的构造函数,只有在没有定义任何构造函数时,编译器才会自动的提供默认的构造函数.也就是说,只要有自己定义的构造函数,不管有没有参数,系统都不会提供默认的那个基本的构造函数了.

例如:

class Person

{

private int age;

public Person(int age)

{

this.age=age;

}

}

如果想要创建对象:Person person=new Person()//这是错误的,因为没有无参数的构造函数.

一般使用this关键字区分成员字段和同名的参数.

如果把构造函数的修饰符编程private或者protected,这样相关的类也不能访问他们:

public class Person

{

private int age;

private Person(int age)

{

this.age=age;

}

}

如果声明的构造函数为私有的没那么外部无法通过使用new关键字来创建该类的对象(但是可以在Person中编写一个公用静态属性和方法,用来实例化该类).在以下两种情况下是有用的:

1.类仅用作某些静态成员或属性容器,因此永远不会实例化它

2.希望类仅通过调用某个静态成员函数来实例化.

静态构造函数是C#的一个新特征,这种构造函数只执行一次,而前面的构造函数是实例构造函数,只要创建类的对象,就会执行他.

class Person

{

static Person()

{

}

}

静态构造函数的存在意义是,类有一些惊天字段火属性,需要在第一次使用类之前,从外部源中初始化这些静态字段和属性.

注意静态构造函数没有访问修饰符,其他的C#代码从来不调用他,但是在加载类时,从石油.NET运行库调用它,所以像public和private这样的访问修饰符就没有任何意义,同样,静态构造函数也不能有任何参数,一个类只能有一个惊天构造函数,显然静态的构造函数只能访问类的静态成员,不能访问类的实例成员.静态构造函数是C#的一个新特性,其实好像很少用到。不过当我们想初始化一些静态变量的时候就需要用到它了。这个构造函数是属于类的,而不是属于哪里实例的,就是说这个构造函数只会被执行一次。也就是在创建第一个实例或引用任何静态成员之前,由.NET自动调用。

class SimpleClass
{
    // Static constructor
    static SimpleClass()
    {
        //
    }
}

构造函数里调用其他的构造函数(构造函数初始化器)

class Car

{

private string description;

private int ID;

public Car(string description, int ID)

{

this.description = description;

this.ID = ID;

}

public Car(string description)

: this(description, 4)

{

this.description = description;

}

}

这里,this关键字仅调用参数最匹配的那个构造函数.

 

C#编程(十四)----------构造函数的更多相关文章

  1. Python并行编程(十四):异步编程

    1.基本概念 除了顺序执行和并行执行的模型以外,还有异步模型,这是事件驱动模型的基础.异步活动的执行模型可以只有一个单一的主控制流,能在单核心系统和多核心系统中运行. 在并发执行的异步模型中,许多任务 ...

  2. linux网络编程之socket编程(十四)

    经过令国鸡冻的APEC会之后,北京的冬天终于不冷了,有暖气的日子就是倍儿爽呀~~洗完热水澡,舒服的躺在床上欢乐地敲打着键盘,是件多么幸福的事呀,好了,抒发情感后,正题继续. 上节中已经初步学习了UDP ...

  3. Unix环境高级编程(十四)守护进程实现时间服务器

    守护进程是在后台运行不受终端控制的进程(如输入.输出等),一般的网络服务都是以守护进程的方式运行.守护进程脱离终端的主要原因有两点:(1)用来启动守护进程的终端在启动守护进程之后,需要执行其他任务.( ...

  4. C#编程总结(十四)dynamic

    http://www.cnblogs.com/yank/p/4177619.html C#编程总结(十四)dynamic 介绍 Visual C# 2010 引入了一个新类型 dynamic. 该类型 ...

  5. 学习ASP.NET Core Razor 编程系列十四——文件上传功能(二)

    学习ASP.NET Core Razor 编程系列目录 学习ASP.NET Core Razor 编程系列一 学习ASP.NET Core Razor 编程系列二——添加一个实体 学习ASP.NET ...

  6. Java编程思想之十四 类型信息

    第十四章 类型信息 运行时类型信息使得你可以在程序运行时发现和使用类型信息 14.1 为什么需要RTTI 面向对象编程中基本的目的是:让代码只操作对基类的引用. 多态: import java.uti ...

  7. 20190827 On Java8 第十四章 流式编程

    第十四章 流式编程 流的一个核心好处是,它使得程序更加短小并且更易理解.当 Lambda 表达式和方法引用(method references)和流一起使用的时候会让人感觉自成一体.流使得 Java ...

  8. 并发编程从零开始(十四)-Executors工具类

    并发编程从零开始(十四)-Executors工具类 12 Executors工具类 concurrent包提供了Executors工具类,利用它可以创建各种不同类型的线程池 12.1 四种对比 单线程 ...

  9. 《Linux命令行与shell脚本编程大全》 第十四章 学习笔记

    第十四章:呈现数据 理解输入与输出 标准文件描述符 文件描述符 缩写 描述 0 STDIN 标准输入 1 STDOUT 标准输出 2 STDERR 标准错误 1.STDIN 代表标准输入.对于终端界面 ...

  10. 《OpenCL异构并行编程实战》第十二至十四章

    ▶ 第十二章,在其他语言中使用 OpenCL ● JOCL(Java Building for OpenCL),PyOpenCL ● 一个 PyOpenCL 的例子代码,需要 pyopencl 包 i ...

随机推荐

  1. mysql 日期操作 增减天数、时间转换、时间戳(转换)

    http://hi.baidu.com/juntao_li/item/094d78c6ce1aa060f6c95d0b MySQL datediff(date1,date2):两个日期相减 date1 ...

  2. SQL Server 2

    一.创建数据表 1.连接服务器: 2.右击“表”节点,选择“新建表”,即: 3.在弹出的“表设计器”中,输入表的列名.选择的数据类型及是否允许为空,即: 二.导入数据表 1.右击表名,弹出菜单,选择“ ...

  3. Java第三阶段学习(十、XML学习)

    一.XML学习 1.模拟Servlet执行 在学习完前端及java与数据库后,将进行WEB编程阶段的学习.在WEB编程中,可以通过浏览器访问WEB服务器上的数据.这时WEB服务器就相当于另一台计算机. ...

  4. C++ 矩阵库 eigen

    找了好久才发现了一个这么方便的C++矩阵库. 官网 http://eigen.tuxfamily.org/index.php?title=Main_Page 参考文章 http://blog.csdn ...

  5. 【Java】 大话数据结构(6) 栈的顺序与链式存储

    本文根据<大话数据结构>一书,实现了Java版的栈的顺序存储结构.两栈共享空间.栈的链式存储机构. 栈:限定仅在表尾进行插入和删除操作的线性表. 栈的插入(进栈)和删除(出栈)操作如下图所 ...

  6. Windows下调用caffe的matlab接口

    一.编译caffe的matlab接口 在我的这篇博客windows-caffe配置已经说了怎么编译了,这里就略过了. 编译成功后,会得到如下图所示文件: matlab接口就在matcaffe文件夹里. ...

  7. 001.NFS简介

    一 简介 NFS 是Network File System的缩写,即网络文件系统.一种使用于分散式文件系统的协定,由Sun公司开发,于1984年向外公布.功能是通过网络让不同的机器.不同的操作系统能够 ...

  8. Android-通知栏上的RemoteView

    Android-通知栏上的RemoteView 学习自 <Android开发艺术探索> https://developer.android.google.cn/reference/andr ...

  9. List,Set的区别

    1.List,Set都是继承自Collection接口2.List特点:元素有放入顺序,元素可重复 ,Set特点:元素无放入顺序,元素不可重复(注意:元素虽然无放入顺序,但是元素在set中的位置是有该 ...

  10. Centos 首次运行MySQL

    1:启动MySQL systemctl start mysqld.service 2:查看MySQL运行状态 systemctl status mysqld.service 3:查看默认密码 grep ...