C# 创建具有内部修饰符的类
我试图对一些代码进行单元测试,这些代码使用一个库,该库通过“internal”类修饰符在内部隐藏了一个依赖项 在测试设置期间,我希望能够创建内部类的实例。通常,我会尝试以下方式:C# 创建具有内部修饰符的类,c#,.net,unit-testing,C#,.net,Unit Testing,我试图对一些代码进行单元测试,这些代码使用一个库,该库通过“internal”类修饰符在内部隐藏了一个依赖项 在测试设置期间,我希望能够创建内部类的实例。通常,我会尝试以下方式: var type = typeof (FooBar); var parameterlessCtor = (from c in type.GetConstructors(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance)
var type = typeof (FooBar);
var parameterlessCtor = (from c in type.GetConstructors(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance)
where c.GetParameters().Length == 0 select c).FirstOrDefault();
object instance;
if(parameterlessCtor != null)
{
instance = parameterlessCtor.Invoke(null);
}
明显的问题是“typeof(FooBar)”-我不能对内部类型执行typeof
不管怎样,我能绕开这件事吗
哦,我无法使用内部可见属性重建程序集…否,但您可以使用
您可以使用反射来实现这一点
Type type = typeof (Class1).Assembly.GetType("Class2");
object instance = Activator.CreateInstance(type);
其中,Class1是与内部类型位于同一程序集中的公共类,Class2是内部类型
这不是最好的解决方案,您将不得不使用反射来调用方法,因为您无法强制转换,但它是有效的请添加他将如何创建实例,我将向上投票。我的意思是给出一个他将如何创建此类实例的示例。
Type type = typeof (Class1).Assembly.GetType("Class2");
object instance = Activator.CreateInstance(type);