使用反射创建受保护类的实例

时间:2011-06-10 02:57:28

标签: c# design-patterns inheritance reflection class-design

有人可以向我解释一下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来返回新对象,以便更好地理解它是如何工作的。

1 个答案:

答案 0 :(得分:1)

Reflection不关心访问修饰符