如何使用反射创建带参数的内部构造函数实例?

5
我有一个不同的场景。我需要创建一个公共类的实例,但其所有构造函数都是内部构造函数。该类没有默认构造函数。
我尝试了以下方法,但它们都没有成功。
Activator.CreateInstance(typeof(ClassName));
Activator.CreateInstance(typeof(ClassName), nonpublic:true);
Activator.CreateInstance(typeof(ClassName),true);
Activator.CreateInstance(typeof(ClassName), new object[]{double,bool});

我也尝试过这个方法,但最终出现了System.MissingMethodException错误。
var constructors = typeof(ClassName).GetConstructors();
foreach(var ctor in constructors)
    ctor.Invoke(new object[] {double, bool});

我无法在Xamarin中使用BindingFlags。 我被卡住了,有人有解决方案吗?


2
该类的作者决定在其程序集之外不应创建该类的实例。您正在尝试规避这个决定。您真的需要创建一个实例吗?您是否误解了它的用途?代码是否可以更改以使构造函数公开?在此处使用反射应该是最后的选择。 - David Arno
我尝试了其他方法,但都没有成功。因此,作为最后的选择,决定使用反射。如果您能指出解决方案,那将非常有帮助。 - Harikrishnan
你尝试创建实例的类是由你自己创建的吗?如果是,可能有其他方法可以在不使用反射的情况下创建实例。 - Dilshod
不是的。它是Xamarin.Forms中已经存在的一个类。 - Harikrishnan
1
你可能正在使用PCL项目,该项目没有你需要的所有反射方法。你可以将项目转换为共享项目类型,并使用BindingFlags等Invoke方法。 - Daniel Luberda
嗨,丹尼尔,谢谢你的建议。但是我已经找到了自己的解决方案。 - Harikrishnan
1个回答

8
我自己找到了解决方案。这是我所做的。
ConstructorInfo info = typeof(ClassName).GetTypeInfo().DeclaredConstructors.First();
ClassName e = info.Invoke(new object[] { parameters }) as ClassName;

我希望这可以帮助到某些人。干杯 :)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接