我来到了C#的现有项目。我可以看到,有几个类有空的无参数构造函数。不管是公共的还是内部的。这些类本身也是公共的或内部的。我在那里既看不到其他构造函数,也看不到继承。我想知道这会有什么好处。
我希望如果绝对没有构造函数,那么C#编译器总是会创建一个参数--无参数的空构造函数。因此,我的问题是:当前代码(在上述条件下)与没有构造函数的代码有任何不同吗?我认为唯一的特例是公共类中的内部构造函数。我还错过了什么吗?
发布于 2018-04-17 11:09:06
嗯,“或内部的”是一个重大的变化;默认的构造函数将是公共的。
但是,通常我看到这一点的原因是,如果稍后有人添加了一个特定的构造函数,那么它并不代表一个重大的更改。构造函数是不寻常的,因为添加自定义构造函数可能会突然中断一些事情,因为它可能会删除默认构造函数;这会产生后果--包括直到运行时才显示的内容(例如反序列化),或者直到库的下游使用者抱怨您破坏了API。
类似地,如果在反射中使用该类型(可能作为插件):Activator.CreateInstance的使用直到运行时才会显示由于删除的无参数构造函数而导致的错误。
当然,你是否真的需要这样做在很大程度上取决于你的意见。
发布于 2018-04-17 11:12:35
如果要防止类的实例在程序集之外实例化,内部构造函数可能很有用。还需要有一个公共/空构造函数,以便与泛型约束一起使用,其中T: new ()参见,https://learn.microsoft.com/en-us/dotnet/csharp/programming-guide/generics/constraints-on-type-parameters
https://stackoverflow.com/questions/49876463
复制相似问题