空构造函数在 C# 中提供了哪些好处?
What benefits do empty constructors provide in C#?
我来到了现有的C#项目。我可以看到几个 classes 有空的无参数构造函数。 public 个,或内部的。 classes 本身也是 public 或内部的。我在那里既看不到其他构造函数,也看不到继承。我想知道这有什么好处。
我预计如果绝对没有构造函数,那么 C# 编译器总是会创建一个无参数的空构造函数。所以我的问题是:当前代码(在上述条件下)是否与没有构造函数时有任何不同?我认为唯一的特例是 public class 中的内部构造函数。我还漏掉了什么吗?
嗯,"or internal ones" 是一个重大的变化;默认构造函数是 public.
但是,通常我看到这种情况的原因是,如果有人稍后添加了一个特定的构造函数,它并不代表一个破坏性的变化。构造函数的不寻常之处在于添加自定义构造函数可能会突然破坏事物,因为它可能 删除 默认构造函数;这会产生后果 - 包括直到运行时才显示的内容(例如反序列化),或者直到库的下游消费者抱怨你破坏了 API.
同样,如果该类型曾经在反射中使用过(可能作为插件):Activator.CreateInstance
由于删除了无参数构造函数,直到运行时,使用才会显示错误。
当然,您是否实际上需要这样做主要是见仁见智。
如果您想防止 class 的实例在程序集外部实例化,则内部构造函数会很有用。还要求有一个 public/empty 构造函数与通用约束一起使用,其中 T : new () 请参阅,https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/generics/constraints-on-type-parameters
我来到了现有的C#项目。我可以看到几个 classes 有空的无参数构造函数。 public 个,或内部的。 classes 本身也是 public 或内部的。我在那里既看不到其他构造函数,也看不到继承。我想知道这有什么好处。
我预计如果绝对没有构造函数,那么 C# 编译器总是会创建一个无参数的空构造函数。所以我的问题是:当前代码(在上述条件下)是否与没有构造函数时有任何不同?我认为唯一的特例是 public class 中的内部构造函数。我还漏掉了什么吗?
嗯,"or internal ones" 是一个重大的变化;默认构造函数是 public.
但是,通常我看到这种情况的原因是,如果有人稍后添加了一个特定的构造函数,它并不代表一个破坏性的变化。构造函数的不寻常之处在于添加自定义构造函数可能会突然破坏事物,因为它可能 删除 默认构造函数;这会产生后果 - 包括直到运行时才显示的内容(例如反序列化),或者直到库的下游消费者抱怨你破坏了 API.
同样,如果该类型曾经在反射中使用过(可能作为插件):Activator.CreateInstance
由于删除了无参数构造函数,直到运行时,使用才会显示错误。
当然,您是否实际上需要这样做主要是见仁见智。
如果您想防止 class 的实例在程序集外部实例化,则内部构造函数会很有用。还要求有一个 public/empty 构造函数与通用约束一起使用,其中 T : new () 请参阅,https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/generics/constraints-on-type-parameters