【问题标题】:Using reflection to create instances of a protected class使用反射创建受保护类的实例
【发布时间】: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


【解决方案1】:

反射不关心访问修饰符

【讨论】:

    猜你喜欢
    • 2012-01-22
    • 2017-01-09
    • 2016-04-16
    • 1970-01-01
    • 2019-01-23
    • 1970-01-01
    • 2018-03-29
    • 2011-06-07
    • 2013-07-21
    相关资源
    最近更新 更多