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】
打赏
扫码打赏,您说多少就多少