C#编程(十四)----------构造函数
原文链接: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#编程(十四)----------构造函数的更多相关文章
- Python并行编程(十四):异步编程
1.基本概念 除了顺序执行和并行执行的模型以外,还有异步模型,这是事件驱动模型的基础.异步活动的执行模型可以只有一个单一的主控制流,能在单核心系统和多核心系统中运行. 在并发执行的异步模型中,许多任务 ...
- linux网络编程之socket编程(十四)
经过令国鸡冻的APEC会之后,北京的冬天终于不冷了,有暖气的日子就是倍儿爽呀~~洗完热水澡,舒服的躺在床上欢乐地敲打着键盘,是件多么幸福的事呀,好了,抒发情感后,正题继续. 上节中已经初步学习了UDP ...
- Unix环境高级编程(十四)守护进程实现时间服务器
守护进程是在后台运行不受终端控制的进程(如输入.输出等),一般的网络服务都是以守护进程的方式运行.守护进程脱离终端的主要原因有两点:(1)用来启动守护进程的终端在启动守护进程之后,需要执行其他任务.( ...
- C#编程总结(十四)dynamic
http://www.cnblogs.com/yank/p/4177619.html C#编程总结(十四)dynamic 介绍 Visual C# 2010 引入了一个新类型 dynamic. 该类型 ...
- 学习ASP.NET Core Razor 编程系列十四——文件上传功能(二)
学习ASP.NET Core Razor 编程系列目录 学习ASP.NET Core Razor 编程系列一 学习ASP.NET Core Razor 编程系列二——添加一个实体 学习ASP.NET ...
- Java编程思想之十四 类型信息
第十四章 类型信息 运行时类型信息使得你可以在程序运行时发现和使用类型信息 14.1 为什么需要RTTI 面向对象编程中基本的目的是:让代码只操作对基类的引用. 多态: import java.uti ...
- 20190827 On Java8 第十四章 流式编程
第十四章 流式编程 流的一个核心好处是,它使得程序更加短小并且更易理解.当 Lambda 表达式和方法引用(method references)和流一起使用的时候会让人感觉自成一体.流使得 Java ...
- 并发编程从零开始(十四)-Executors工具类
并发编程从零开始(十四)-Executors工具类 12 Executors工具类 concurrent包提供了Executors工具类,利用它可以创建各种不同类型的线程池 12.1 四种对比 单线程 ...
- 《Linux命令行与shell脚本编程大全》 第十四章 学习笔记
第十四章:呈现数据 理解输入与输出 标准文件描述符 文件描述符 缩写 描述 0 STDIN 标准输入 1 STDOUT 标准输出 2 STDERR 标准错误 1.STDIN 代表标准输入.对于终端界面 ...
- 《OpenCL异构并行编程实战》第十二至十四章
▶ 第十二章,在其他语言中使用 OpenCL ● JOCL(Java Building for OpenCL),PyOpenCL ● 一个 PyOpenCL 的例子代码,需要 pyopencl 包 i ...
随机推荐
- mysql 日期操作 增减天数、时间转换、时间戳(转换)
http://hi.baidu.com/juntao_li/item/094d78c6ce1aa060f6c95d0b MySQL datediff(date1,date2):两个日期相减 date1 ...
- SQL Server 2
一.创建数据表 1.连接服务器: 2.右击“表”节点,选择“新建表”,即: 3.在弹出的“表设计器”中,输入表的列名.选择的数据类型及是否允许为空,即: 二.导入数据表 1.右击表名,弹出菜单,选择“ ...
- Java第三阶段学习(十、XML学习)
一.XML学习 1.模拟Servlet执行 在学习完前端及java与数据库后,将进行WEB编程阶段的学习.在WEB编程中,可以通过浏览器访问WEB服务器上的数据.这时WEB服务器就相当于另一台计算机. ...
- C++ 矩阵库 eigen
找了好久才发现了一个这么方便的C++矩阵库. 官网 http://eigen.tuxfamily.org/index.php?title=Main_Page 参考文章 http://blog.csdn ...
- 【Java】 大话数据结构(6) 栈的顺序与链式存储
本文根据<大话数据结构>一书,实现了Java版的栈的顺序存储结构.两栈共享空间.栈的链式存储机构. 栈:限定仅在表尾进行插入和删除操作的线性表. 栈的插入(进栈)和删除(出栈)操作如下图所 ...
- Windows下调用caffe的matlab接口
一.编译caffe的matlab接口 在我的这篇博客windows-caffe配置已经说了怎么编译了,这里就略过了. 编译成功后,会得到如下图所示文件: matlab接口就在matcaffe文件夹里. ...
- 001.NFS简介
一 简介 NFS 是Network File System的缩写,即网络文件系统.一种使用于分散式文件系统的协定,由Sun公司开发,于1984年向外公布.功能是通过网络让不同的机器.不同的操作系统能够 ...
- Android-通知栏上的RemoteView
Android-通知栏上的RemoteView 学习自 <Android开发艺术探索> https://developer.android.google.cn/reference/andr ...
- List,Set的区别
1.List,Set都是继承自Collection接口2.List特点:元素有放入顺序,元素可重复 ,Set特点:元素无放入顺序,元素不可重复(注意:元素虽然无放入顺序,但是元素在set中的位置是有该 ...
- Centos 首次运行MySQL
1:启动MySQL systemctl start mysqld.service 2:查看MySQL运行状态 systemctl status mysqld.service 3:查看默认密码 grep ...