- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
在C#中定义类时,常常不需要定义相关的构造函数和析构函数,因为基类System.Object提供了一个默认的实现方式。但是,如果需要,可以提供自己的构造函数和析构函数,以便初始化对象和清理对象。
使用下述语法把一个简单的构造函数添加到类中:
class MyClass
{
public MyClass()
}
这个构造函数与包含它的类同名,且没有参数(使之成为类的默认构造函数),这是一个公共函数,所以类的对象可以使用这个构造函数进行实例化。
也可以使用私有的默认构造函数,即这个类的对象实例不能用这个构造函数来创建:
class MyClass
{
private MyClass()
{
//Constructor code.
}
}
最后,也可以用相同的方式给类添加非默认的构造函数,其方法是提供参数,例如:
class MyClass
{
public MyClass()
{
//Default constructor code.
}
}
public MyClass(int myInt)
{
//Nondefault constructor code (uses myInt)
}
析构函数使用略微不同的语法来声明。在.NET中使用的析构函数(由System.Object类提供)叫作Finalize(),但这不是我们用于声明析构函数的名称。使用下面的代码,而不是重写Finalize():
class MyClass
{
~MyClass()
{
//Destructor body.
}
}
类的析构函数有带有~前缀的类名(与构造函数的相同)来声明。当进行垃圾回收时,就执行析构函数中的代码,释放资源。在调用这个析构函数后,还将隐式地调用基类的析构函数,包括System.Object根类中的Finalize()调用。这个技术可以让.NET Framework确保调用Finalize(),因为重写Finalize()是指基类调用需要显示地执行,这是有潜在危险的。
构造函数的执行序列
如果在类的构造函数中执行多个任务,把这些代码放在一个地方是非常方便的。使用一个方法就可以把代码放在一个地方,而C#提供了一个更好的方式。任何构造函数都可以进行配置,在执行自己的代码前调用其他构造函数。
在讨论构造函数前,先看看在默认情况下,创建类的实例时会发生什么情况。在开发过程中,对象常常并没有按照希望的那样执行,而是在调用构造函数时出现错误。这常常是因为类继承结构中的某个基类没有正确实例化,或者没有正确地给其类构造函数提供信息。理解在对象生命周期的这个阶段发生的事情,将更容易解决这类问题。
为了实例化派生的类,必须实例化它的基类。而要实例化这个基类,又必须实例化这个基类的基类,这样一直到实例化System.Object为止。结果是无论使用什么构造函数实例化一个类,总是要先调用System.Object.Object()。
如果对一个类使用非默认的构造函数,默认的情况是调用基类的默认构造函数(这里与原书不一致。原书的内容是:如果对一个类使用非默认的构造函数,默认的情况下是在其基类上使用匹配于这个构造函数签名的构造函数。如果没有找到这样的构造函数,就使用基类的默认构造函数(根类System.Object总是要使用默认的构造函数,因为这个类没有非默认的构造函数)。)。考虑下面的对象结构:
{
public MyBaseClass()
{
Console.WriteLine(Call MyBaseClass().);
}
?
public MyBaseClass(int i)
{
Console.WriteLine(Call MyBaseClass(int i));
}
}
?
class MyDerivedClass: MyBaseClass
{
public MyDerivedClass()
{
Console.WriteLine(Call MyDerivedClass().);
}
?
public MyDerivedClass(int i)
{
Console.WriteLine(Call MyDerivedClass(int i).);
}
?
public MyDerivedClass(int i, int j)
{
Console.WriteLine(Call MyDerivedClass(int i,int j));
}
}
注:下面的内容与原书有差异,略有修改。我的代码是在.NET 3.5环境下运行。
如果以下面的方式实例化MyDerivedClass:
MyDerivedClass myObj = new
您可能关注的文档
最近下载
- 人工智能教学课件.ppt VIP
- 公司与员工签订车辆使用协议(2024两篇) .pdf VIP
- 小森LS-40印刷机保养操作指导07.pdf VIP
- 2024-2025学年深圳市育才三中小升初入学分班考试语文试卷附答案解析.pdf VIP
- 咖啡瑞幸咖啡美国上市招股说明书中文全译版本.pdf
- 2023年深圳市南山区育才三中小升初分班考试数学模拟试卷及答案解析.pdf VIP
- 涵管埋设施工技术方案.docx VIP
- 2018-2019、2021-2022年重庆邮电大学《808数字电路与逻辑设计》历年硕士真题汇总.pdf VIP
- 初中化学装置气密性的检验.pptx VIP
- 原理1-经济学概述.ppt VIP
文档评论(0)