c#反射调用函数
简单的说一个类A里有若干的私有函数,ADD、KEEP等等很多个,以后可能还会添加,这些函数都没有参数也没有返回值。如何在A里加一个公有函数DO(stringsName),...
简单的说一个类A里有若干的私有函数,ADD、KEEP等等很多个,以后可能还会添加,这些函数都没有参数也没有返回值。
如何在A里加一个公有函数DO(string sName),实现根据sName函数名调用这些函数。 展开
如何在A里加一个公有函数DO(string sName),实现根据sName函数名调用这些函数。 展开
3个回答
推荐于2017-09-06
展开全部
方法可以写成这样:
public void Do(string sName)
{
MethodInfo dynMethod = this.GetType().GetMethod(sName, BindingFlags.NonPublic | BindingFlags.Instance);
dynMethod.Invoke(this, null);
}
public void Do(string sName)
{
MethodInfo dynMethod = this.GetType().GetMethod(sName, BindingFlags.NonPublic | BindingFlags.Instance);
dynMethod.Invoke(this, null);
}
追问
如果函数有的有参数,有的没参数要如何呢?
追答
有就加到methodParams里,没有就null
public void Do(string sName,object[] methodParams)
{
MethodInfo dynMethod = this.GetType().GetMethod(sName, BindingFlags.NonPublic | BindingFlags.Instance);
dynMethod.Invoke(this, methodParams);
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
完整的代码:
using System.Reflection;
namespace ReflectionDllDemo
{
class Program
{
static void Main(string[] args)
{
var asm = Assembly.LoadFile(@"d:\3_code\DotNet\DllDemo\DllDemo\bin\Debug\DllDemo.dll");
var type = asm.GetType("DllDemo.ClassGreenerycn");
var instance = asm.CreateInstance("DllDemo.ClassGreenerycn");
type.GetProperty("Name").SetValue(instance, "http://greenerycn.cnblogs.com", null);
type.GetProperty("IsTest").SetValue(instance, true, null);
var method = type.GetMethod("Hello");
method.Invoke(instance, null);
}
}
}
using System.Reflection;
namespace ReflectionDllDemo
{
class Program
{
static void Main(string[] args)
{
var asm = Assembly.LoadFile(@"d:\3_code\DotNet\DllDemo\DllDemo\bin\Debug\DllDemo.dll");
var type = asm.GetType("DllDemo.ClassGreenerycn");
var instance = asm.CreateInstance("DllDemo.ClassGreenerycn");
type.GetProperty("Name").SetValue(instance, "http://greenerycn.cnblogs.com", null);
type.GetProperty("IsTest").SetValue(instance, true, null);
var method = type.GetMethod("Hello");
method.Invoke(instance, null);
}
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
代码如下:
public void Do(string sName,object[] methodParams)
{
MethodInfo dynMethod = this.GetType().GetMethod(sName, BindingFlags.NonPublic | BindingFlags.Instance);
dynMethod.Invoke(this, methodParams);
}
public void Do(string sName,object[] methodParams)
{
MethodInfo dynMethod = this.GetType().GetMethod(sName, BindingFlags.NonPublic | BindingFlags.Instance);
dynMethod.Invoke(this, methodParams);
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询