protected vs public构造函数用于抽象类?有区别吗?

时间:2010-12-26 00:01:49

标签: c# constructor public protected

这个问题出于好奇。是否有区别:

public abstract class MyClass
{
    public MyClass()
    {
    }
}

public abstract class MyClass
{
    protected MyClass()
    {
    }
}

感谢。

3 个答案:

答案 0 :(得分:31)

出于所有实际目的,它们是相同的。

但是既然你要求差异,我可以想到的一个区别是,如果你使用反射搜索类的构造函数,那么匹配的BindingFlags会有所不同。

BindingFlags flags = BindingFlags.Public | BindingFlags.Instance;
var constructor = typeof(MyClass).GetConstructor(flags, null, new Type[0], null);

这将在一个案例中找到构造函数,而不是另一个案例。

答案 1 :(得分:15)

您不应该在Abstract类中拥有公共构造函数 抽象类型的构造函数只能由派生类型调用。因为公共构造函数创建了一个类型的实例,并且您无法创建抽象类型的实例,所以具有公共构造函数的抽象类型设计不正确。

详细了解http://msdn.microsoft.com/en-us/library/ms182126.aspx

答案 2 :(得分:2)

就未来使用此代码而言,没有区别。