欢迎来到.net学习网

欢迎联系站长一起更新本网站!QQ:879621940

您当前所在位置:首页 » C#从入门到精通 » 正文

C#中的构造函数

创建时间:2013年11月19日 22:46  阅读次数:(5490)
分享到:
7.5使用构造函数
使用new关键字来创建一个对象时,“运行时”(runtime)必须使用那个类的定义来构造对象。“运行时”必须从操作系统申请一个内存区域,在其中填充由类定义的字段,然后调用一个构造函数来执行任何必要的初始化工作。

构造函数(constncor)是-种特殊的方法,它在创建类的一个实例时自动运行。它与类同名,能获取参数,但不能返回何值(即使是void)。每个类都必须至少有一个构造函数。如果不提供自己的构造函数,编译器会帮你自动生成一个默认构造函数。但是,编译器生成的默认构造函数不做任何实际的事情。默认构造函数非常好写—只需添加一个与类同名的public方法,不让它返回任何值就可以了。下例展示了有一个默认构造函数的Circle类,这个自己写的构造函数能将radius字段初始化为0:
Class Circle
{
Public circle()//默认构造函数
{
 Radius=0;
}
Public double Area()
{
Return Math.PI*radius*radius;
}
}

注意,在c#术语中,默认构造函数是指不获取任何参数的一个构造函数。至于是由编译器生成,还是由自己来写,则并不重要。同时还可以写一系列非默认构造函数 (也就是要获取参数的构造函数),具体参见稍后的7.5.1节“重载构造函数”。

注意,构造函数被标识为public。假如省略该关键字,构造函数将默认为private(这和其他任何方法和字段是一样的)。private构造函数不能在类的外部使用,造成你无法从Circle类的外部创建Circle对象。但是,这并不是说private构造函数没有任何用处。它们确实有自己的用处,只是它们不在当前讨论范围内。

现在,Crcle类已经能正常使用,可以开始使用它的Area方法。注意,可以使用圆点表示
法来调用一个Circle对象的Area方法:
Circle c;
C=new Circle();
Double areaOfCircle=c.Area();

重载构造函数
现在,可以声明一个Circle变量,让它指向一个新建的Circle对象,然后调用它的Area方法。但工作还没有结束,还有最后一个问题需要解决。所以Circle对象的面积将一直为0,因为默认构造函数把radius设置为0之后,radius的值就没有变对(radius字段是private的,初始化之后,就没有办法改变它的值)。为了解决这个问题,必须认识到构造函数本质上还是方法。和所有方法一样,它是能够重载的。我们知道,Console.WriteLine方法有好几个版本,每个版本都获取不同的参数。类似地,构造函数也可以有多个不同的版本。现在,可以在Circle类中添加一个构造函数,它取radius作为参数,如下所示:
Class Circle
{
Public circle()//默认构造函数
{
 Radius=0;
}
Public Circle(int initialRadius) //重载的构造函数
{
Radius=initialRadius;
}
Public double Area()
{
Return Math.PI*radius*radius;
}

Private int radius;
}

注意 构造函数在类中的排列顺序是无关紧要的;可以随意采用任何顺序来定义它们。然后,在创建一个新的Circle对象时,就可以使用这个构造甬数,如下所示:
Circle C;
C = new Circle(45);

生成应用程序时,编译器会根据为new操作符指定的参数来判断应该使用哪个构造函数。在本例中,由于传入的是一个int,所以在编译器生成的代码中,将调用获取一个int参数的那个构造函数。

使用C#语言时要注意:一旦为一个类写了任何构造函数,编译器就不再自动生成默认构造函数。所以,假如写了一个构造函数,并让它接收一个或多个参数,同时还想要一个默认构造函数,就必须亲自写那个默认构造函数(一个不获取任何参数的构造函数)。

partial类
一个类可能包含大量方法、字段、构造函数以及本书以后会讲到的其他项目。一个功能齐全的类可能相当大。在c#中,可以将一个类的源代码拆分到单独的文件中。这样一来,大型类的定义就可以使用较小的、更容易管理的片段来进行组织.Visual Studio 2008为Windows Presentation Foundation(WDF)应用程序采用的就是这种代码组织技术,开发者能鳊辑的源代码在一个文件中堆护,窗体布局发生变化时由Visual Studio生成的代码则在另一个文件中维护。
一个类被拆分到多个文件中之后,需要在每个文件中使用partial(部分)关键字来定义类的不同部分,例如,假定Circle类被拆分到两个文件中,分别是circl.cs(包含构造函数)和circ2.cs(包含方法和字段)。那么,circl.cs的内容如下:
Partial class Circle
{

Public circle()//默认构造函数
{
 Radius=0;
}
Public Circle(int initialRadius) //重载的构造函数
{
Radius=initialRadius;
}
}

Cir2.cs的内容则如下:
Partial class Circle
{
Public double Area()
{
Return Math.PI*radius*radius;
}

Private int radius;
}

对拆分到多个文件的一个类进行编译时,必须向编译器提供所有的文件。牧薪腥≈涤敫持?/strong>
1.取得某一行数据的方法:
(1)使用GetDataRow方法取指定行数据
来源:.net学习网
说明:所有来源为 .net学习网的文章均为原创,如有转载,请在转载处标注本页地址,谢谢!
【编辑:Wyf】

打赏

取消

感谢您的支持,我会做的更好!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

最新评论

共有评论0条
  • 暂无任何评论,请留下您对本文章的看法,共同参入讨论!
发表评论:
留言人:
内  容:
请输入问题 11+46=? 的结果(结果是:57)
结  果: