我想通过创建一些类实例Activator.CreateInstance(...)
。所有类都继承相同的抽象类。构造函数只有一个参数。
类和构造函数不应该是公开的。
这就是我想要的代码(但不是得到):
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
一切 都会好起来的(类保持不变!)。Foo
public
internal
所以我可以理解Activator.CreateInstance(...)
需要公共访问(他来自包外),但是为什么剩下的内部类可能会这样呢?
到目前为止,我认为当类是内部的 并且 构造函数是公共的时,它与类是内部的 并且 构造函数也是内部的(对于某种分层访问层)......但这似乎是错误的!
有人可以帮我理解这里发生了什么 - 为什么内部类中的公共构造函数可以工作?