欢迎来到.net学习网

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

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

编写构造函数并创建对象示例

创建时间:2013年11月26日 22:55  阅读次数:(4149)
分享到:
在下面的练习中,我们将声明一个类,该类将对平面几何中的一个点进行建模。这个类将包含两个private字段,分别用于保存点的横坐标x和纵坐标y。此外,这个类还将包含用于初始化这两个字段的构造函数。我们将用new关键字创建类的实例,并调用构造函数来初始化它。

编写构造函数并创建对象
l,如果尚未运行Visual Studi0 2008.请先启动它。
2,打开Classes项目,它位于“文档”文件夹下的\Microsoft Press\Visual CSharp Step by Step\Chapter 7\Classes子文件夹中。
3,在“解决方案资源管理器”中,双击Program.cs文件,在“代码和文本编辑器”窗口中显示它的内容。
4,找到Program类中的Main方法。Main方法调用了Entrance方法。对Entrance方法的调用是封闭在一个try块中的,try之后紧接着是一个catch处理程序。使用这个try,catch块,可以在Entrance方法中编写以前一般出现在Main中的代码,并可放心地知道所有异常都会被捕捉。

5,在“代码和文本编辑器”窗口中打开Point.cs文件。该文件义了一个名为Point的类,这个类将用于标识x和y坐标所定义的点。Point类目前为空。

6,返回Program.cs文件,找到Program类中的Entrance方法。编辑Entrance方法的主体用以下语句来代替//to do注释:
Point origin=new Point();

7,在“生成”菜单中,单击“生成解决方案”。
程序将成功生成,不会报错,因为编详器会自动生成Point类的默认构造函数。不过我们看不到这个构造函数的c#代码,因为编译器没有生成任何源语言的语句。

8,返回Point.cs文件中的Point类。用public构造函数(接受两个int参数x和y,并调用  Console.WriteLine方法在控制台上输出这些参数的值)来代替//to do注释,如以下加粗体的代码所示。Point类现在应该像下面这样:
class Point
{
public Point (int x,  int y}
{
Conaole.WriteLine(“x:{0},y{1}”,x,y);
}
}

注意:记住,Console.WriteLine方法将{o}和(1)作为占位符使用,在上述语句中,当程序运行时,{0}被替换成x的值,{1}被替换成y的值。

9,在“生成”菜单中选择“生成解决方案”。
这一次,编译器将报告一个错误:
“Classes.Point”不包含采用”0”参数的构造函数
在Entrance中对默认构造函数的调用将失败,因为现在不再有默认构造函数。一旦为Point类写了任何自己的构造函数,编译器就不再自动生成默认构造函数。为了解决这个问题,必须亲自写一个默认构造函数。

10,编辑Point类.在其中添加一个public默认构造函数。它将调用Console.WriteLine方法,在控制台上输出字符串”default constructor called”(已调用了默认构造函数)。现在的Point类如下:
class  Point 
{
public Point()
{
Console.WriteLine(“default constrauctor called”);
}

public Point(int x,int y)
{
Console.WriteLine("x:{0},y:{1}",x,y ) ;
}
}

11,在“生成”菜单中选择“生成解决方案”。程序现在应该能成功生成。
12,如以下加粗的代码所示,在Program.cs文件中,编辑Entrance方法的主体,声明一个  Point类型的变量,命名为bottomRight。并使用获取两个参数的那个构造函数,把这个变量初始化成一个新的Point对象。参数值分别使用1024和1280.表示分辨率为1024×1280的屏幕的右下角的坐杯。现存的Entrance方法如下:
static void Entrance()
{
   Point origin=new Point () :
   Point bottarlRiaht= new Point(l024, 1280);
}

13,“调试”菜单中单击“开始执行(不调试)”。
应用程序将顺利生成并运行,向控制台输出以下消息
default constructor called
x:1024, y:1280

14,按Enter键,终止程序运行并返回Visual Studi0 2008编程环境。
现在,我们打算在Point类中添加两个int字段来表示一个点的x和y坐标.然后修改构造甬数米初始化这些字段。

15,在Point.cs文件中编辑Point类,添加两个private实例字段,分别叫x和y,如以下加粗显示的代码所示。现在的Point类应该像下面这样:
class  Point 
{
public Point()
{
Console.WriteLine(“default constrauctor called”);
}

public Point(int x,int y)
{
Console.WriteLine("x:{0},y:{1}",x,y ) ;
}

private int x,y ;
}

接着编辑第二个Point构造函数,将x和y字段初始化成x和y参数的值。但在这样做的时候,要注意一个潜在的陷阱。如果不小心,就可能写出如下所示的构造函数:
public PoinL (int x,nt y) //错误写法
{
x=x;
y=y;
}

虽然代码能够编译,但这些语句存在严重的歧义。编译器如何知道在x=x;这样的语句中,第一个x是字段,第二个x是参数呢?事实上,编译器根本就不区分!假如方法的参数与一个字段同名,那么在该方法的任何语句中,参数都会覆盖字段。所以,上述构造函数实际做的事情是将参数赋给它自己,根本不会修改字段。这显然不是我们所希望的。

解决方案使用this关键字来限定哪些变量是参数,哪些变量是字段。为一个变量附加this前缀之后,意思就是说:“这个(this)对象中的字段”。
16,修改要获取两个参数的Point构造函数,用以下代码中加粗显示的部分来代替Console.WriteLine语句:
public PoinL (int x,nt y) 
{
this.x=x;
this.y=y;
}

17,编辑Point类的默认构造函数,将x和y字段初始化为-1(同时删除Console.WriteLine语句)。注意,虽然目前没有参数来造成混淆,但作为一个良好的习惯,仍应使用this明确指出这是一个字段引用:
public PoinL (int x,nt y) 
{
this.x=-1;
this.y=-1;
}

18,在“生成”菜单中选择“生成解决方案”。确定代码能成功编译。不会显示错跌或警告(也可以运行它,只是它还不能产生任何输出)。

如果方法从属于一个类,而且要对类的一个特定实例的数据进行操作,就称为实例方法(instance method)。本章稍后将出现其他类型的方法。在下面的练习中,准备为Point类写一个名为DistanceTo的实例方法,它用于计算两个点之间的距离。d
来源:.net学习网
说明:所有来源为 .net学习网的文章均为原创,如有转载,请在转载处标注本页地址,谢谢!
【编辑:Wyf】

打赏

取消

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

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

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

最新评论

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