この質問は好奇心からです。違いはありますか?
public abstract class MyClass
{
public MyClass()
{
}
}
そして
public abstract class MyClass
{
protected MyClass()
{
}
}
ありがとう。
それらはすべての実用的な目的で同じです。
しかし、違いを求めたので、私が考えることができる1つの違いは、リフレクションを使用してクラスのコンストラクターを検索している場合、一致するBindingFlagsが異なることです。
BindingFlags flags = BindingFlags.Public | BindingFlags.Instance;
var constructor = typeof(MyClass).GetConstructor(flags, null, new Type[0], null);
これにより、一方のケースではコンストラクターが見つかりますが、もう一方のケースでは見つかりません。
抽象クラスにパブリックコンストラクターを含めるべきではありません。抽象型のコンストラクターは、派生型によってのみ呼び出すことができます。パブリックコンストラクターは型のインスタンスを作成し、抽象型のインスタンスを作成できないため、パブリックコンストラクターを使用した抽象型は正しく設計されていません。
詳細については、こちらをご覧ください http://msdn.Microsoft.com/en-us/library/ms182126.aspx
このコードの将来の使用に関しては、違いはありません。