C#中能够实现将任意方法作为参数传入一个指定方法吗?

Tenner 2006-12-14 03:53:47
我现在有一个方法:

public void DoCommand([A])
{
// 一些代码

[A]

// 一些代码
}

其中 [A] 是另一个方法(包括参数)
这种可以在C#里实现么?C++中似乎可以用函数指针来实现
其中 [A] 可以是任意方法,方法名、参数列表、返回值可能都不一样

比如:
DoCommand(MyFun1(12, 15));
DoCommand(MyFun2("asdf", "jkll"));

请高手赐教,或者给出另外一种思路的解决方法也行。
...全文
2063 52 打赏 收藏 转发到动态 举报
写回复
用AI写文章
52 条回复
切换为时间正序
请发表友善的回复…
发表回复
khijfv2008 2006-12-15
  • 打赏
  • 举报
回复
to lz
你的标题该写上,邹夫子,孟夫子等请进...
高手效应
wen7679 2006-12-15
  • 打赏
  • 举报
回复
现在就是做不到规范,要求就是可以传入任意的方法,没有任何限制的
dlzhangln 2006-12-15
  • 打赏
  • 举报
回复
委托,看愚翁的blog有专门讲这一部分的
flyaqiao 2006-12-15
  • 打赏
  • 举报
回复
同意楼上
真相重于对错 2006-12-15
  • 打赏
  • 举报
回复
用反射,传入MethodInfo
WuZongBo 2006-12-15
  • 打赏
  • 举报
回复
private int EndTime = 150;//结束时间

private int ErrorTime = 0;//记录错误时间(秒)

private delegate void Methods();//代理

private Methods Method;//当前错误方法

#region StartMethod
/// <summary>
/// 重起方法
/// </summary>
private void StartMethod()
{
Methods MyMethods = new Methods(Method);
MyMethods();
}
#endregion

#region ErrorHandling
/// <summary>
/// 错误处理
/// </summary>
private void ErrorHandling()
{
BeginInvoke(new MethodInvoker(ErrorTimerStart));
}
#endregion

#region ErrorTimerStart
/// <summary>
/// 开始计时
/// </summary>
private void ErrorTimerStart()
{
TM001.Start();
}
#endregion

#region RegionalMistake
/// <summary>
/// Regional Mistake
/// </summary>
/// <param name="Text">Errorinfo</param>
/// <param name="Test">Methods</param>
private void RegionalMistake(string Text, Methods Test)
{
if (Text != null) Writelog(Text);
Method = Test;
try
{
BeginInvoke(new MethodInvoker(ErrorHandling));
}
catch(Exception Err)
{
this.close();
}
}
#endregion
midymidy 2006-12-15
  • 打赏
  • 举报
回复
支持
midymidy 2006-12-15
  • 打赏
  • 举报
回复
委托比较好
cinray 2006-12-15
  • 打赏
  • 举报
回复
还是委托好
losedxyz 2006-12-14
  • 打赏
  • 举报
回复
反射好象可以
losedxyz 2006-12-14
  • 打赏
  • 举报
回复
关注
SmallMummy 2006-12-14
  • 打赏
  • 举报
回复
帮顶下
关注ing
flyaqiao 2006-12-14
  • 打赏
  • 举报
回复
private void button1_Click(object sender, EventArgs e)
{
CallAnyMethod(this.GetType().GetMethod("toolStripMenuItem3_Click", BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public), toolStripMenuItem3, EventArgs.Empty);
}

public void CallAnyMethod(MethodInfo anyMethod, params object[] param)
{
anyMethod.Invoke(this, param);
}

private void toolStripMenuItem3_Click(object sender, EventArgs e)
{
MessageBox.Show((sender as ToolStripItem).Name);
}
bigrongshu 2006-12-14
  • 打赏
  • 举报
回复

带来大量的装箱拆箱操作,效率不好

不如设计好一点泛型程序结构,可以达到灵活性和性能的折衷
superxiaomm 2006-12-14
  • 打赏
  • 举报
回复
用委托就可以拉
nijiaze 2006-12-14
  • 打赏
  • 举报
回复
Q群 12757054 群主有请!
希望相关的.net开发者&&初学者家入(但是一定要经常的在线)
我要保证在线人数
能让大家的问题及时得到解决!
欢迎加入 共同进步!
糊涂男人 2006-12-14
  • 打赏
  • 举报
回复
利用反射技术能够实现 看看反射方面的知识吧
test33 2006-12-14
  • 打赏
  • 举报
回复
不委托好象也应该可以的哇`
yulinlover 2006-12-14
  • 打赏
  • 举报
回复
老大,赶紧把解法贡献出来啊,我原来想写个函数测试工具的,可惜实现不了,自己感觉象是在写编译器!太复杂了!你用反射怎么实现的啊??

我原来就是想这样的: 假如:我在textBox里输入MessageBox.Show("hello")的字符串,怎么让它执行这个语句了?。好象是和你这有点象的啊?

贡献一下吧!
Tenner 2006-12-14
  • 打赏
  • 举报
回复
这种方法只能调用当前类里的public方法
暂时可以满足需求,等待高手带来更好的方法
加载更多回复(32)

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧