なぜ、プライベートパラメータなしコンストラクタが基本クラスから継承されているのかをC#では理解できません。これは最も簡単な例です:プライベートコンストラクタを持つクラスからの継承が許可されない理由
public class Base
{
private Base()
{
}
public string Name { get; set; }
}
public class Derived : Base
{
public Derived(string name)
{
base.Name = name;
}
}
コンパイラはこのコードをコンパイルしません。それはなぜそうですか?クラスは密閉されていません。基本クラスは(Singletonのように)何度もインスタンス化されないことを意図していますが、派生クラスにはパラメータ化されたコンストラクタで何度もインスタンス化する権利がすべてあると思います。 この場合、継承がなぜ許可されないのですか?
外部からは基本クラスにはコンストラクタがありませんが、同じプロジェクトであれば内部がうまくいくはずです:) – EpicKip
クラスから継承している限り、このクラスにはアクセス可能なコンストラクタしかし、あなたはDerivedクラスが基本クラスを意図することができないようにプライベートクラスのみを入れました。パラメータなしのコンストラクタをprotectedとして配置し、Derivedクラスがそれを使用できるようにします。 – JBO
「プライベート」の意味を明確に説明している[The documentation](https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/private)も参照してください。私。メンバは宣言されている型によってのみアクセスできます。派生クラスはコンストラクタを含む基本クラスのprivateメンバーにアクセスできません。これは 'private'コンストラクタが呼び出せないことを意味するわけではなく(非プライベートコンストラクタによって呼び出される可能性もあります)、継承されないことを意味しません(非プライベートコンストラクタも提供できます)。 –