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

Mar*_*lon 35 c# constructor protected public

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

public abstract class MyClass
{
    public MyClass()
    {
    }
}
Run Code Online (Sandbox Code Playgroud)

public abstract class MyClass
{
    protected MyClass()
    {
    }
}
Run Code Online (Sandbox Code Playgroud)

谢谢.

Mar*_*ers 31

它们对于所有实际目的都是相同的.

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

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

这将在一个案例中找到构造函数,但不会在另一个案例中找到.


She*_*Pro 16

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

看看这里的详细信息 http://msdn.microsoft.com/en-us/library/ms182126.aspx

  • "设计不正确"与"不能拥有"截然不同. (5认同)
  • @ code4life - 如果您可以提供示例或发布示例链接,那将是非常棒的.不以任何方式剥夺你的评论,但我对你的意思感兴趣. (2认同)