gpt4 book ai didi

c# - 使用反射调用不带参数的公共(public)方法

转载 作者:行者123 更新时间:2023-11-30 21:10:17 25 4
gpt4 key购买 nike

我的用户控件中有一个方法:

public string ControleIdContainer()
{
string abc = "Hello";
return abc;
}

现在我想使用反射在我的页面上调用此方法。我已经试过了,但它不起作用:

DirectoryInfo dirInfo = new DirectoryInfo(Server.MapPath("~/UserControls"));
FileInfo[] controlsInfo = dirInfo.GetFiles("*.ascx");
foreach (var item in controlsInfo)
{
var customControl = LoadControl(string.Format("~/UserControls/{0}", item));
var controlType = customControl.GetType();
var controlClientScript = controlType.GetMethod("ControleIdContainer").Invoke(null,null);
}

最佳答案

出错的原因有很多

<强>1。原因 1

您还没有将 Invoke 中的类实例作为第一个参数。代码应该是

var controlClientScript = controlType.GetMethod("MethodName").Invoke(classInstance,null);

<强>2。原因 2

可以有多个与您的方法同名的方法(重载方法)。在这种情况下,它会显示以下错误。

An unhandled exception of type 'System.Reflection.AmbiguousMatchException' occurred. Ambiguous match found.

所以你需要指定你调用的是没有参数的方法。使用以下代码。

MethodInfo mInfo = classInstance.GetType().GetMethods().FirstOrDefault
(method => method.Name == "MethodName"
&& method.GetParameters().Count() == 0);
mInfo.Invoke(classInstance, null);

<强>3。原因 3

如果您使用 Type.GetType 获取类类型,如果该类在另一个程序集中,Type.GetType 将为 null。在这种情况下,您必须循环遍历 Assemblies。使用下面的代码。

Type type = GetTheType("MyNameSpace.MyClass");
object objMyClass = Activator.CreateInstance(type);
MethodInfo mInfo = ojMyClass.GetType().GetMethods().FirstOrDefault
(method => method.Name == "MethodName"
&& method.GetParameters().Count() == 0);
mInfo.Invoke(objMyClass, null);

GetTheType 方法在这里。 GetTheType 的参数必须是 Fully Qualified Name

 public object GetTheType(string strFullyQualifiedName)
{
Type type = Type.GetType(strFullyQualifiedName);
if (type != null)
return Activator.CreateInstance(type);
foreach (var asm in AppDomain.CurrentDomain.GetAssemblies())
{
type = asm.GetType(strFullyQualifiedName);
if (type != null)
return Activator.CreateInstance(type);
}
return null;
}

关于c# - 使用反射调用不带参数的公共(public)方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8565726/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com