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时,它也工作得很好。感谢您的帮助: