我有一个带有 2 个构造函数的公共(public)类:默认(不带参数),它是内部的,另一个是公共(public)的。
默认构造函数使用一些默认值调用另一个构造函数。
我使用反射调用内部构造函数,因此它不会在程序集中的任何地方静态使用(仅通过反射)。
当我进行反射调用时,我得到:
System.MissingMethodException
Message=No parameterless constructor defined for this object.
我知道两种解决方法:
这个问题有更好的解决方案吗?
值得一提的是,如果默认构造函数是公共(public)的,我不会得到那个异常。
谢谢,
波阿斯。
最佳答案
构造函数没有被删除,可能在搜索你的构造函数时你应该指定标志BindingFlag.NonPublic
.
class xxx
{
private xxx() :
this(10)
{
}
public xxx(int value)
{
Console.WriteLine(value);
}
}
static void Main(string[] args)
{
Activator.CreateInstance(typeof(xxx), true);
Console.ReadLine();
}
Activator.CreateInstance 有一个带有 bool 值的重载,您可以在其中指定是否要调用非公共(public)构造函数。
public static Object CreateInstance(
Type type,
bool nonPublic
)
Activator.CreateInstance(type, true) 将调用构造函数,如果它是 public 或 private\internal\protected。
关于c# - 如何防止 C# 编译器删除内部构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8019244/