c# - 使用内部构造函数实例化类

标签 c# .net reflection

我有一个类,其构造函数定义为内部类,这意味着我无法实例化它。虽然这可能有道理,但出于调试和研究目的,我仍然想做一次。

是否可以通过反射来实现?我知道我可以访问私有(private)/内部成员,但我可以调用内部构造函数吗?

或者,由于构造函数不做任何重要的事情,我可以使用反射说“看,只要给我一个类的实例而不调用构造函数,我将手动完成它”?

性能和“稳定性”在这里不是问题,因为它不是生产代码。

编辑: 正如澄清:可悲的是,我不控制另一个程序集,也没有它的源代码,我只是想了解它是如何工作的,因为它的文档是非-存在,但我应该与之交互。

最佳答案

另一种方法是将调用程序集指定为“ friend ”程序集。

只需将其添加到包含内部构造函数的程序集的 AssemblyInfo.cs 文件中:

[assembly: InternalsVisibleTo("Calling.Assembly")]

如果你没有权限访问程序集,你也可以直接调用构造函数(使用反射):

MyClass obj = (MyClass) typeof(MyClass).GetConstructor(
                  BindingFlags.NonPublic | BindingFlags.Instance,
                  null, Type.EmptyTypes, null).Invoke(null);

关于c# - 使用内部构造函数实例化类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1199590/

相关文章:

c# - 通过 jquery 在中继器内单击复选框

golang DeepEqual 和 Reflect.Zero

c# - Linq2SQL : Select only some columns, 但仍然可以提交更改

c# - Dapper C# 的可转换问题

c# - 加载 XML 文档 - 名称不能以零字符开头

.net - Service Fabric System.BadImageFormatException

java - 使用 Java 注释将类替换为派生类

java - 为什么 Java 不公开基于 toString/hashCode/equals 的编译时反射?

c# - 如何检查用户是 "logged in"?

c# - 声明 2 个相似的匿名对象