Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.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#_.net_Unit Testing - Fatal编程技术网

C# 创建具有内部修饰符的类

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)

我试图对一些代码进行单元测试,这些代码使用一个库,该库通过“internal”类修饰符在内部隐藏了一个依赖项

在测试设置期间,我希望能够创建内部类的实例。通常,我会尝试以下方式:

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);