有人能给我一个很好的理由为什么在C#中链接的构造函数总是在任何构造函数体之前被调用? .NET允许您在构造函数中的任何位置调用链式构造函数,那么为什么C#强制您在构造函数体执行
.NET允许您在构造函数中的任何位置调用链式构造函数,那么为什么C#强制您在构造函数体执行之前执行它?
我曾写信给安德斯H并问过他,尽管他一定很忙,但他还是很乐意花时间回复.不幸的是,他设法回答了我实际上没有问过的问题(关于命名的构造函数.)
所以,出于好奇,我想我会在这里问,因为我个人认为这个限制没有一个好的理由,所以希望我会再教育:-)
只是为了澄清. .NET CLR规则是必须调用1个构造函数,只有1个构造函数,并且只能调用一次.所以在CLR中这些都是有效的
public class Meh { public Meh() { Console.WriteLine("Meh()"); this("Hello"); } public Meh(string message) { Console.WriteLine("Meh {0}", message); base(); } }
但不是在C#
使链式构造函数首先执行保证所有基类元素至少在派生类中可用,因为它们在基类中.允许链接的构造函数在任意点执行将是一种权衡,几乎没有明显的好处.允许链式构造函数的任意入口点也会阻止延迟创建基类,因为这样的特性可能会运行链式构造函数两次.