【发布时间】:2011-09-12 04:35:39
【问题描述】:
有人可以向我解释一下 Activator.CreateInstance 方法如何能够创建受保护类的实例吗?
public abstract class File
{
public string Name {get; set;}
}
public class ExcelFile : File
{
protected ExcelFile()
{
}
}
无法通过调用ExcelFile file = new ExcelFile();
来创建对象的新实例'ExcelFile' 是不可访问的,因为它 防护等级
但可以使用以下方法创建它:
Type type = Type.GetType("ConsoleApplication.ExcelFile");
object o = Activator.CreateInstance(type, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.CreateInstance, null, new object[0], CultureInfo.InvariantCulture);
上述代码是从 BCL WebRequest.Create() 方法中提取出来的,想知道 Activator.CreateInstance 中的哪些参数允许反射创建受保护类的实例?
注意:我计划在工厂类中使用 Activator.CreateInstance 来返回新对象,因此希望更好地了解它是如何工作的。
【问题讨论】:
-
启用它的参数是
BindingFlags.NonPublic。
标签: c# design-patterns inheritance reflection class-design