0

为什么在 C# 3.0 中,当我们重载指定类的构造函数时,我们应该在类体中编写默认构造函数?据我所知,没有必要这样做。

class Test
{
      public int ID {get; private set;}
      public int Name {get; private set;}

      public Test() 
      {
      }

      public Test(int id, int name)
      {
           ....
      }

}    

谢谢

4

3 回答 3

2

让我把你的问题转过来:为什么我不必为我的类编写一个构造函数才能使用?

这样做的原因是,当您不编写任何构造函数时,C# 编译器会为您发出默认构造函数。只是为了让我们更容易。但是,当您指定一个或多个构造函数时,C# 编译器会假定您指定了所有需要的构造函数。在这种情况下,它不可能发出默认构造函数,因为并非所有类都应该具有默认构造函数。

虽然这个 C# 特性对应用程序开发人员来说很好,但对框架开发人员来说可能很烦人。Microsoft 的一些团队总是在他们的 C# 代码中编写默认构造函数,因为当一个类没有(代码编写的)构造函数时,很容易犯错误,即在下一个版本中添加替代构造函数,而无需显式指定默认构造函数。在这种情况下,新版本将不兼容,因为默认构造函数将丢失。

于 2010-04-13T10:29:39.873 回答
1

对于当类被序列化时 - 你的类不能被“重新水化”,除非它有一个默认的构造函数。

这方面的一个例子是,当您的类被用于发送到/来自 Web 服务的消息时,或者当它被保存到某种存储(如数据库表或文件)中时。

于 2010-04-13T10:12:02.577 回答
0

如果你的类是有用的(如果你提供了一些合理的默认值),那么默认构造函数是好的,否则它只会为类的用户创造更多的工作和歧义。

根据您的示例,它非常没用,因为您无权访问设置器(除非您的类使用默认值)。

于 2010-04-13T10:10:08.463 回答