这个问题出于好奇。是否有区别:
public abstract class MyClass
{
public MyClass()
{
}
}
和
public abstract class MyClass
{
protected MyClass()
{
}
}
感谢。
答案 0 :(得分:31)
出于所有实际目的,它们是相同的。
但是既然你要求差异,我可以想到的一个区别是,如果你使用反射搜索类的构造函数,那么匹配的BindingFlags会有所不同。
BindingFlags flags = BindingFlags.Public | BindingFlags.Instance;
var constructor = typeof(MyClass).GetConstructor(flags, null, new Type[0], null);
这将在一个案例中找到构造函数,而不是另一个案例。
答案 1 :(得分:15)
您不应该在Abstract类中拥有公共构造函数 抽象类型的构造函数只能由派生类型调用。因为公共构造函数创建了一个类型的实例,并且您无法创建抽象类型的实例,所以具有公共构造函数的抽象类型设计不正确。
答案 2 :(得分:2)
就未来使用此代码而言,没有区别。