C#学习教程:使用单个对象上的reflection调用方法分享


使用单个对象上的reflection调用方法

所以我有以下内容:

public class Singleton { private Singleton(){} public static readonly Singleton instance = new Singleton(); public string DoSomething(){ ... } public string DoSomethingElse(){ ... } } 

使用reflection如何调用DoSomething方法?

我问的原因是因为我将方法名称存储在XML中并动态创建UI。 例如,我正在动态创建一个按钮并告诉它在单击按钮时通过reflection调用哪种方法。 在某些情况下,它将是DoSomething,或者在其他情况下,它将是DoSomethingElse。

未经测试,但应该工作……

 string methodName = "DoSomething"; // eg read from XML MethodInfo method = typeof(Singleton).GetMethod(methodName); FieldInfo field = typeof(Singleton).GetField("instance", BindingFlags.Static | BindingFlags.Public); object instance = field.GetValue(null); method.Invoke(instance, Type.EmptyTypes); 

很好。 谢谢。

对于无法引用远程程序集的情况,这里采用相同的方法稍作修改。 我们只需要知道基本的东西,比如类的全名(即namespace.classname和远程程序集的路径)。

上述就是C#学习教程:使用单个对象上的reflection调用方法分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—猴子技术宅(www.ssfiction.com)

 static void Main(string[] args) { Assembly asm = null; string assemblyPath = @"C:works...StaticMembers.dll" string classFullname = "StaticMembers.MySingleton"; string doSomethingMethodName = "DoSomething"; string doSomethingElseMethodName = "DoSomethingElse"; asm = Assembly.LoadFrom(assemblyPath); if (asm == null) throw new FileNotFoundException(); Type[] types = asm.GetTypes(); Type theSingletonType = null; foreach(Type ty in types) { if (ty.FullName.Equals(classFullname)) { theSingletonType = ty; break; } } if (theSingletonType == null) { Console.WriteLine("Type was not found!"); return; } MethodInfo doSomethingMethodInfo = theSingletonType.GetMethod(doSomethingMethodName ); FieldInfo field = theSingletonType.GetField("instance", BindingFlags.Static | BindingFlags.Public); object instance = field.GetValue(null); string msg = (string)doSomethingMethodInfo.Invoke(instance, Type.EmptyTypes); Console.WriteLine(msg); MethodInfo somethingElse = theSingletonType.GetMethod( doSomethingElseMethodName ); msg = (string)doSomethingElse.Invoke(instance, Type.EmptyTypes); Console.WriteLine(msg);} 

本文来自网络收集,不代表猴子技术宅立场,如涉及侵权请点击右边联系管理员删除。

如若转载,请注明出处:https://www.ssfiction.com/ckf/959904.html

发表评论

邮箱地址不会被公开。 必填项已用*标注