C#构造函数详解_第1页
C#构造函数详解_第2页
C#构造函数详解_第3页
C#构造函数详解_第4页
C#构造函数详解_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第C#构造函数详解1、构造函数的名字与类名相同。

2、使用new表达式创建类的对象或者结构(例如int)时,会调用其构造函数。并且通常初始化新对象的数据成员。

3、除非类是静态的,否则会为没有构造函数的类,自动生成一个默认构造函数,并使用默认值来初始化对象字段。

4、构造函数可以有参数,可以以多态的形式存在多个构造函数。

代码:

classCoOrds

publicintx,y;

//实例构造函数(默认构造函数)

publicCoOrds()

x=0;

y=0;

//具有两个参数的构造函数

publicCoOrds(intx,inty)

this.x=x;

this.y=y;

//重写toString方法

publicoverridestringToString()

return(String.Format("({0},{1})",x,y));

staticvoidMain(string[]args)

CoOrdsp1=newCoOrds();//调用默认的无参构造函数

CoOrdsp2=newCoOrds(5,3);//调用两个参数构造函数

//使用重写ToString方法显示结果

Console.WriteLine("CoOrds#1at{0}",p1);

Console.WriteLine("CoOrds#2at{0}",p2);

Console.ReadKey();

/*Output:

CoOrds#1at(0,0)

CoOrds#2at(5,3)

*/

分析:

1.其中CoOrds()是构造函数,诸如此类不带参数的构造函数称为默认构造函数。

2.CoOrds(intx,inty)同样也是构造函数,构造函数可以有参数,允许多态。

三、静态构造函数

1.静态构造函数不使用访问修饰符或不具有参数。

2.在创建第一个实例或引用任何静态成员之前,将自动调用静态构造函数以初始化类。

3.不能直接调用静态构造函数。

4.用户无法控制在程序中执行静态构造函数的时间。

5.静态构造函数的一种典型用法是在类使用日志文件且将构造函数用于将条目写入到此文件中时使用。

6.静态构造函数对于创建非托管代码的包装类也非常有用,这种情况下构造函数可调用LoadLibrary方法。

7.如果静态构造函数引发异常,运行时将不会再次调用该函数,并且类型在程序运行所在的应用程序域的生存期内将保持未初始化。

classTestClass

publicstaticintx=0;

//构造函数

TestClass()

x=1;

//静态构造函数

staticTestClass()

{//第二步,执行x=2

x=2;

//第一步,程序入口Main最先执行。然后执行publicstaticintx=0接着执行静态构造函数。

publicstaticvoidMain(string[]args)

Console.WriteLine("x:{0}",x);//打印,x=2

TestClassTest=newTestClass();//第三步执行构造函数,此时x=1

Console.WriteLine("x:{0}",x);//打印x=1

Console.Read();

}

分析1:

1.Main是程序入口,当执行Main的时候,最先执行publicstaticintx=0

2.接着执行静态构造函数,此时x=2

3.然后执行Main函数里面的内容,打印x,此时x=2

4.初始化TestClass,然后会执行构造函数,此时x=1

5.打印x=1

publicclassA

publicstaticreadonlyintx;

staticA()

//第二步,调用B.y,此处B.y=0,因为int类型在初始化阶段,会给赋默认值,默认值为0。最后x=0+1(返回给第一步)

x=B.y+1;

publicclassB

//第一步,调用A.x,然后执行类A的静态构造函数,等待返回(第二步返回的A.x=1,所以y=1+1)

publicstaticinty=A.x+1;

publicstaticvoidMain(string[]args)

//第三步,A.x=1,y=2。

Console.WriteLine("x:{0},y:{1}。",A.x,y);

Console.ReadLine();

}

分析2:

1.首先,每一个项目有且只能有一个静态类的Main函数作为入口函数。而入口函数是最先执行的。

2.由于Main函数在B类里面,首先会初始化B类。而类的初始化顺序是:类里的静态变量,然后执行静态构造函数。

3.运行起先执行publicstaticinty=A.x+1这个,执行的时候,会先把y初始化为0,然后计算y的值。

4.计算y的值的时候,调用了A的静态变量x。所以会先初始化A。

5.初始化A时首先去执行publicstaticreadonlyintx,先把x初始化为0。

6.然后执行A的静态构造函数x=B.y+1此时y已经初始化为0了。

7.计算得到x=1。然后回到publicstaticinty=A.x+1得到y=2。

8.然后再执行Main函数的内容。得出结果x=1,y=2

四、私有构造函数

私有构造函数是一种特殊的实例构造函数。它通常用于只包含静态成员的类中。如果类具有一个或多个私有构造函数而没有公共构造函数,则其他类(除嵌套类外)无法创建该类的实例。

代码:

publicclassPrivateConstructor

privatePrivateConstructor()

//PrivateTesta=newPrivateTest();

//注释打开会报错,错误信息:不可访问,因为它受保护级别限制。因为私有构造函数无法在类的外面实例化。

publicclassPrivateTest

inti;

privatePrivateTest()

i=3;

staticvoidMain(string[]args)

PrivateConstructort=newPrivateConstructor();//嵌套类允许实例化。

PrivateTestp=newPrivateTest();//类的内部允许实例化。

Console.WriteLine("i:{0}",p.i);//结果:i:3

Console.Read();

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论