Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/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#_C# 4.0_Reflection_Types - Fatal编程技术网

C# 从类的名称在同一程序集中创建内部类的实例

C# 从类的名称在同一程序集中创建内部类的实例,c#,c#-4.0,reflection,types,C#,C# 4.0,Reflection,Types,我试图创建与调用类位于同一程序集中的内部类的实例。不幸的是,这对我不起作用。我正在使用以下代码段: Assembly businessAssembly = this.GetType().Assembly; var concreteValidator = businessAssembly.CreateInstance(t.NotificationType.ValidatorClassName, true, BindingFlags.Default | BindingFlags.Create

我试图创建与调用类位于同一程序集中的内部类的实例。不幸的是,这对我不起作用。我正在使用以下代码段:

Assembly businessAssembly = this.GetType().Assembly;
var concreteValidator = businessAssembly.CreateInstance(t.NotificationType.ValidatorClassName, true,
    BindingFlags.Default | BindingFlags.CreateInstance | BindingFlags.Instance | BindingFlags.NonPublic, 
    null, 
    new Object[] { t }, 
    null, 
    null);
请注意,t.NotificationType.ValidatorClassName的格式为Namespace.ClassName。 这不应该起作用吗?哪里出错了?

如果类是public internal,而构造函数是public的,则CreateInstance方法缺少public绑定标志:

BindingFlags.Public
这将成为:

Assembly businessAssembly = this.GetType().Assembly;
var concreteValidator = businessAssembly.CreateInstance(t.NotificationType.ValidatorClassName, true,
    BindingFlags.Default | BindingFlags.CreateInstance | BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public, 
    null, 
    new Object[] { t }, 
    null, 
    null);

您是否尝试过使用CreateInstanceString重载?什么是无效的。您是否得到任何类型的异常?ValidatorClassName的值是多少?内部类上的构造函数也是内部的吗?如果是这样,它应该可以工作。不工作意味着concreteValidator的值为空。它没有抛出异常。构造函数实际上是公共的,而不是内部的。这会改变什么吗?OP说这是内部的,不是公开的。我错了;但是,如果类是内部的,则需要包括公共绑定标志。不,不需要。如果类和构造函数是内部的,BindingFlags.Public将导致MissingMethodException。如果类是内部的,而构造函数是公共的,则仍然需要BindingFlags.Public。我刚刚测试过它。当我将构造函数设置为内部时,它工作得很好。当我将构造函数公开并添加BindingFlags.public时,它也工作得很好。感谢您的帮助: