C#构造函数
来源:互联网 发布:淘宝买家也可以开店吗 编辑:程序博客网 时间:2024/06/14 22:40
从C++转到C#,一直以为C#就是自带很多库的C++,不怎么留意;而且,在平时的工作中基本上用之前的知识足以,没有用到C#高级的东西;很多语法糖知道有,但是没用过。
这一段时间,系统地看一下C#的教程,越来越觉得开拓视野,再加上Unity的开发方式,真是孤陋寡闻了。
构造函数分为:
1.实例构造函数
2.私有构造函数
3.静态构造函数
构造函数是一种特殊的方法,主要是为了给初始化对象赋初值。
1.实例构造函数
1.实例构造函数
2.私有构造函数
3.静态构造函数
构造函数是一种特殊的方法,主要是为了给初始化对象赋初值。
1.实例构造函数
使用new表达式创建某个类的对象时,会使用实例构造函数创建和初始化所有实例成员变量。
<span style="font-size:14px;">public class ProgramTest { int j; public ProgramTest() { j = 4; Console.WriteLine("I am ProgramTest,{0}", j); } static void Main(string[] args) { ProgramTest pt = new ProgramTest(); Console.Read(); }</span>
结果为:I am ProgramTest,4;
在此次实验中,我们首先定义了一个私有成员j,经过初始化给他赋了一个初值4,当我实例化类ProgramTest时,就会执行实例构造函数。
诸如此类不带参数的构造函数叫“默认构造函数”,如果某个类没有构造函数,则会自动生成一个默认构造函数,并使用默认值来初始化对象字段。
诸如此类不带参数的构造函数叫“默认构造函数”,如果某个类没有构造函数,则会自动生成一个默认构造函数,并使用默认值来初始化对象字段。
<span style="font-size:14px;">public class ProgramTest { int j; public ProgramTest() { Console.WriteLine("I am ProgramTest,{0}", j); } static void Main(string[] args) { ProgramTest pt = new ProgramTest(); Console.Read(); } }</span>
结果为:I am ProgramTest,0;
也可以创建带有参数的构造函数
<span style="font-size:14px;">public class ProgramTest { int j; public ProgramTest(int i) { j = 2; Console.WriteLine("I am ProgramTest,i={0},j={1}",i, j); } static void Main(string[] args) { ProgramTest pt = new ProgramTest(1); Console.Read(); } </span>
结果为:I am ProgramTest i=1,j=2;
那若是一个类中既有无参构造函数,又有有参构造函数那会怎么样呢?
<span style="font-size:14px;">public class ProgramTest { int j; public ProgramTest() { j = 3; Console.WriteLine("I am ProgramTest 默认构造函数,j={0}", j); } public ProgramTest(int i) { j = 2; Console.WriteLine("I am ProgramTest 有参构造函数,i={0},j={1}",i, j); } static void Main(string[] args) { ProgramTest pt1 = new ProgramTest(); ProgramTest pt2 = new ProgramTest(1); Console.Read(); } </span>
结果为:I am ProgramTest 默认构造函数 j=3
I am ProgramTest 有参构造函数 i=1,j=2;
可见,若是两者同时存在,那么看类实例化时,是怎么实例的。
2.私有构造函数
私有构造函数是一种特殊的实例构造函数。它通常用在只包含静态成员的类中。
如果类具有一个或多个私有构造函数而没有公共构造函数,则其他类(除嵌套类外)无法创建该类的实例。
如果类具有一个或多个私有构造函数而没有公共构造函数,则其他类(除嵌套类外)无法创建该类的实例。
<span style="font-size:14px;">public class Test { private Test() { Console.WriteLine("I am Test"); } } public class ProgramTest { int j; private ProgramTest() { j = 3; Console.WriteLine("I am ProgramTest 默认构造函数,j={0}", j); } static void Main(string[] args) { Test t = new Test(); ProgramTest pt1 = new ProgramTest(); Console.Read(); } }</span>
结果:这时你会发现编译器会提示你,你无法创建Test的实例
(即使你在Test类中添加一个静态成员,结果依然会提示因为该构造函数受其保护级别的限制而不可访问);
(即使你在Test类中添加一个静态成员,结果依然会提示因为该构造函数受其保护级别的限制而不可访问);
若是只在自己类里有私有类呢?
<span style="font-size:14px;">public class ProgramTest { int j; private ProgramTest() { j = 3; Console.WriteLine("I am ProgramTest 默认构造函数,j={0}", j); } static void Main(string[] args) { ProgramTest pt1 = new ProgramTest(); Console.Read(); } }</span>
结果:I am ProgranmTest 默认构造函数,j=3;
注意,如果您不对构造函数使用访问修饰符,则在默认情况下它仍为私有构造函数。但是,通常显式地使用private修饰符来清楚地表明该类不能被实例化。
若是一个类中既有实例构造函数又有私有构造函数,那么当实例对象是会怎么执行呢?
若是一个类中既有实例构造函数又有私有构造函数,那么当实例对象是会怎么执行呢?
<span style="font-size:14px;">public class Test { int i; private Test() { i = 1; Console.WriteLine("I am Test 默认构造函数 i={0}", i); } public Test(int i) { Console.WriteLine("I am Test 有参构造函数 i={0}", i); } } public class ProgramTest { static void Main(string[] args) { Test t = new Test(); //编译器提示:因为该构造函数受其保护级别的限制而不可访问 Console.Read();</span>
若是只执行有参构造函数呢?
<span style="font-size:14px;">public class Test { int i; private Test() { i = 1; Console.WriteLine("I am Test 默认构造函数 i={0}", i); } public Test(int i) { Console.WriteLine("I am Test 有参构造函数 i={0}", i); } } public class ProgramTest { static void Main(string[] args) { Test t = new Test(2); Console.Read(); } }//结果:I am Test 有参构造函数 i=2</span>
3.静态构造函数
静态构造函数用来初始化静态变量,这个构造函数是属于类的,而不是属于哪个实例的。
就是说这个构造函数只会被执行一次。也就是在创建第一个实例或引用任何静态成员之前,由.NET自动调用。
<span style="font-size:14px;">public class Test { static int i; static Test() { i = 1; Console.WriteLine("I am Test 默认构造函数 i={0}", i); } } public class ProgramTest { static void Main(string[] args) { Test t1 = new Test(); Console.Read(); } }//结果为:I am Test 默认构造函数 i=1</span>
静态构造函数的特点:
1.静态构造函数既没有访问修饰符,也没有参数。
2.在创建第一个实例或引用任何静态成员之前,将自动调用静态构造函数来初始化类,也就是无法直接调用静态构造函数,也无法控制什么时候执行静态构造函数。
2.在创建第一个实例或引用任何静态成员之前,将自动调用静态构造函数来初始化类,也就是无法直接调用静态构造函数,也无法控制什么时候执行静态构造函数。
3.一个类只能有一个静态构造函数,最多只能运行一次。
4.静态构造函数不可以被继承。
5.如果没有静态构造函数,而类中的静态成员有初始值,那么编译器会自动生成默认的静态构造函数。
如果静态默认构造函数和公有默认构造函数同时存在,会怎么样呢?
<span style="font-size:14px;">public class Test { static int i; static Test() { i = 1; Console.WriteLine("I am Test 静态默认构造函数 i={0}", i); } public Test() { Console.WriteLine("I am Test 公有默认构造函数 i={0}", i); } } public class ProgramTest { static void Main(string[] args) { Test t1 = new Test(); Console.Read(); } }//结果:I am Test 静态默认构造函数 i=1 // I am Test 公有默认构造函数 i=1</span>
如果静态默认构造函数和公有有参构造函数同时存在,我实例化类让它调用静态默认构造函数会怎么样呢?
<span style="font-size:14px;">public class Test { static int i; static Test() { i = 1; Console.WriteLine("I am Test 静态默认构造函数 i={0}", i); } public Test(int j) { Console.WriteLine("I am Test 公有有参构造函数 i={0}", j); } } public class ProgramTest { static void Main(string[] args) { Test t1 = new Test(); //系统会提示错误 Console.Read(); } }</span>
如果静态默认构造函数和公有有参构造函数同时存在,我实例化类让它调用公有构造函数会怎么样呢?
<span style="font-size:14px;">public class Test { static int i; static Test() { i = 1; Console.WriteLine("I am Test 静态默认构造函数 i={0}", i); } public Test(int j) { Console.WriteLine("I am Test 公有有参构造函数 i={0}", j); } } public class ProgramTest { static void Main(string[] args) { Test t1 = new Test(2); Console.Read(); } }//结果:I am Test 静态默认构造函数 i=1// I am Test 公有有参构造函数 j=2</span>
静态构造函数的实际意义不大;
原文地址
0 0
- C#中的构造函数
- C#的构造函数
- C# 静态构造函数
- C#构造函数
- C#中的构造函数
- C#构造函数
- c#中的构造函数
- C#中的构造函数
- C# 构造函数
- C#静态构造函数
- C# 静态构造函数
- C# 静态构造函数
- C#中构造函数
- C#静态构造函数
- C#中的构造函数
- C#静态构造函数
- C#静态构造函数
- C#构造函数
- android:java.lang.NoClassDefFoundError: com.lidroid.xutils.HttpUtils 异常的解决
- 软件测试简介、测试原则、测试过程、测试内容、测试方法
- thrift之TTransport层的堵塞的套接字I/O传输类TSocket
- MFC对话框控件随对话框的大小变化
- 广积粮—筑高墙—缓称王
- C#构造函数
- 在arm上使用python-2.7.10
- programming-challenges The Tourist Guide (110903) 题解
- hdu2795
- iOS 基础类解析 - NSData
- 二叉树的层次遍历
- 三,资源初始化操作和主菜单界面的创建
- 一键拨号,发短信,QQ,百度地图导航
- 进程重启后,泄露的内存能否回收