Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用反射创建受保护类的实例_C#_Design Patterns_Inheritance_Reflection_Class Design - Fatal编程技术网

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

C# 使用反射创建受保护类的实例,c#,design-patterns,inheritance,reflection,class-design,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”由于其

有人能给我解释一下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中的哪些参数允许反射创建受保护类的实例

public abstract class File
{
    public string Name {get; set;}
}

public class ExcelFile : File
{
    protected ExcelFile()
    {
    }
}

注意:我计划在factory类中使用Activator.CreateInstance返回新对象,以便更好地了解它的工作原理。

反射不关心访问修饰符

启用它的参数是
BindingFlags.NonPublic