を介してクラスのインスタンスをいくつか作成したいと思いますActivator.CreateInstance(...)
。すべてのクラスは同じ抽象クラスを継承します。コンストラクターには 1 つのパラメーターがあります。
クラスとコンストラクターはpublicであってはなりません。
これは私がコードで欲しいものです(しかし得られません):
internal abstract class FooAbstract
{
protected Bar MyProperty { get; set; }
// Constructor is only need in concreat classes of FooAbstract
protected FooAbstract(Bar barProperty)
{
MyProperty = barProperty;
}
}
internal class Foo : FooAbstract
{
// Internal is enough, public is not necessary
internal Foo(Bar barProperty)
: base(barProperty)
{
}
// Many more Foo´s ...
internal class Creator()
{
private object CreateAFoo<T>() where T : FooAbstract
{
T someFoo = (T)Activator.CreateInstance(typeof(T), barProperty);
}
}
しかし、これは Exception をスローしますConstructor on type 'Foo' not found
。
コンストラクターをFooAbstract
and Foo
に変更すると、public
すべてがうまくいきます (クラスはそのままですinternal
!)。
したがって、パブリックアクセスが必要であることは理解できActivator.CreateInstance(...)
ますが (彼はパッケージの外部からアクセスします)、内部クラスが残っている場合になぜこれが可能になるのでしょうか?
今まで、クラスが内部 で コンストラクターがパブリックの場合、クラスが内部 で コンストラクターも内部(一種の階層アクセス層)と同じになると思っていましたが、これは間違っているようです!
誰かがここで何が起こったのかを理解するのを手伝ってもらえますか? 内部クラスのパブリック コンストラクターが機能するのはなぜですか?