当前位置: 首页 > 编程语言 > C#

C#中如何动态调用函数分享

时间:2023-04-10 13:16:35 C#

C#中如何动态调用函数我有方法:add(intx,inty)我也有:inta=5;诠释b=6;字符串s="添加";是否可以用字符串s调用add(a,b)?我怎么能在C#中做到这一点?我怎么能在C#中做到这一点?使用反射。add必须是某种类型的成员,所以(删除了很??多细节):typeof(MyType).GetMethod("add").Invoke(null,new[]{arg1,arg2})这假设add是静态的(否则调用第一个参数是一个对象),我不需要额外的参数来唯一标识GetMethod调用中的方法。使用反射-尝试Type.GetMethod方法,例如MethodInfoaddMethod=this.GetType().GetMethod("add");objectresult=addMethod.Invoke(this,newobject[]{x,y});你失去了强类型和编译时检查-调用不知道方法需要多少参数,它们的类型是什么以及返回值的实际类型是什么。因此,如果您没有做对,事情可能会在运行时失败。它也更慢。如果该函数在编译时已知,而您只想避免编写switch语句。构建:词典>函数=新词典>();函数[“添加”]=this.add;函数[“减法”]=this.subtract;称为:字符串函数名=“添加”;整数x=1;整数y=2;intz=函数[函数名](x,y);您可以使用反射。使用系统;使用System.Reflection;namespaceConsoleApplication1{classProgram{staticvoidMain(string[]args){Programp=newProgram();输入t=p.GetType();MethodInfomi=t.GetMethod("添加",BindingFlags.NonPublic|BindingFlags.Instance);stringresult=mi.Invoke(p,newobject[]{4,5}).ToString();Console.WriteLine("结果="+结果);Console.ReadLine();}privateintadd(intx,inty){returnx+y;}}}@Richard的回答很棒。只是为了扩展它:这在动态创建未知类型的对象并需要调用其方法的情况下很有用:vardo=xs.Deserialize(newXmlTextReader(ms));//例子——XML反序列化do.GetType().GetMethod("myMethodName").Invoke(do,new[]{arg1,arg2});因为在编译时,do只是一个Object。以上就是C#学习教程:C#中如何动态调用函数的全部内容分享。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。涉及侵权,请点击维权联系管理员删除。如需转载请注明出处: