c# - 1 首先调用链式构造函数的充分理由?

标签 c#

谁能给我 1 个很好的理由,为什么在 C# 中,链式构造函数总是在任何构造函数主体之前调用?

.NET 允许您在构造函数中的任何位置调用链式构造函数,那么为什么 C# 会强制您在构造函数主体执行之前执行此操作?

我曾经写信给 Anders 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# 中

最佳答案

使链式构造函数首先执行可保证所有基类元素在派生类中至少与在基类中一样可用。允许链式构造函数在任意点执行将是一种权衡,几乎没有明显的好处。

允许链式构造函数的任意入口点也排除了基类的惰性创建,因为这样的功能可能会运行链式构造函数两次。

关于c# - 1 首先调用链式构造函数的充分理由?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/516844/

相关文章:

c# - IAppbuilder.UseWebApi 有什么作用?

c# - 继承类型的 CSV 序列化

c# - 错误 : The Name Assert Does Not Exist In The Current Context

c# - CosmosDb 更改提要 : How to set max concurrent calls to 1?

c# - 用于编译的关键字 var 性能

c# - asp.net 按钮中的 Bootstrap 按钮下拉菜单

c# - Process.Start 启动进程两次而不是一次

c# - System.Data.SQlite 未显示在 Visual Studio 2013 的更改数据源中

c# - 如何在与 C# 相同的 gRPC 中声明小数对象

c# - 使用 PayPal 的 ASP MVC 结帐仅用于总金额