我来到C#的现有项目。我可以看到几个类都有空参数构造函数。公共的,或内部的。课程本身也是公开的或内部的。我既看不到其他的构造函数,也看不到继承。我想知道这有什么好处。
我预计如果绝对没有构造函数,那么C#编译器总会创建一个无参数的空构造函数。所以我的问题是:当前代码(在上述条件下)是否与没有构造函数不同?我认为唯一的特殊情况是公共类中的内部构造函数。我错过了什么吗?
答案 0 :(得分:6)
但是,通常我看到这个的原因是,如果有人稍后添加了一个特定的构造函数,它并不代表一个重大变化。构造函数的不寻常之处在于添加自定义构造函数会突然破坏,因为它可能删除默认构造函数;这会带来影响 - 包括直到运行时才会显示的内容(例如反序列化),或者直到图书馆的下游消费者抱怨您已经破坏了API。
同样,如果类型曾用于反射(可能作为插件):Activator.CreateInstance
使用不会因为删除无参数构造函数而在运行时显示错误。
当然
答案 1 :(得分:2)
如果要防止在程序集外部实例化类的实例,则内部构造函数可能很有用。还要求将公共/空构造函数与通用约束一起使用,其中T:new()参见,https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/generics/constraints-on-type-parameters