【发布时间】:2013-10-23 05:27:50
【问题描述】:
我想通过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);
}
}
但这会引发异常Constructor on type 'Foo' not found。
当我将FooAbstract 和 Foo 的构造函数更改为public 时,一切都会好起来的(类保持internal!)。
所以我可以理解Activator.CreateInstance(...) 需要公共访问(他来自包外),但是为什么剩下的内部类可以做到这一点?
直到现在我认为当 class 是 internal 并且 constructor is public 它会和 class is internal 和 构造函数也是内部的(对于某种分层访问层)......但这似乎是错误的!
有人可以帮我理解这里发生了什么 - 为什么内部类中的公共构造函数可以工作?
【问题讨论】:
-
这是一个非常好的问题 - 我很想看到一个解释。你是绝对正确的,当一个类是内部的,那么它的任何构造函数也将是内部的,即使它们被标记为公共的。因此,正如您所说,公开它不应该对 Activator.CreateInstance() 产生任何影响!
标签: c# .net constructor access-modifiers activator