【发布时间】:2011-03-04 18:50:38
【问题描述】:
我有几种方法都返回具有不同签名(参数)和不同名称的 void。我需要将这些方法作为参数传递给一个泛型方法,后者将调用它。这也需要尽可能透明。
按照我目前得到的:
private void button1_Click(object sender, EventArgs e)
{
Action<string,int> TestHandler = Test;
InvokeMyMethod(TestHandler);
Action<string, int,object > TestHandlerN = TestN;
InvokeMyMethod(TestHandlerN);
}
public void InvokeMyMethod(Delegate Method)
{
object[] args = new object[X];
Method.DynamicInvoke();
}
public void Test(string t1, int t2)
{
MessageBox.Show(t1 + t2);
}
public void TestN(string t1, int t2, object t3)
{
MessageBox.Show(t1 + t2);
}
这就是我需要的:
private void button1_Click(object sender, EventArgs e)
{
InvokeMyMethod(Test);
InvokeMyMethod(TestN);
}
public void InvokeMyMethod(XXX_Type Method)
{
object[] args = new object[X];
Method.DynamicInvoke(args);
}
public void Test(string t1, int t2)
{
MessageBox.Show(t1 + t2);
}
public void TestN(string t1, int t2, object t3)
{
MessageBox.Show(t1 + t2);
}
【问题讨论】:
-
与代表一起做这件事不是最简单的吗?每个不同的签名都需要一个结构,您可以将这些参数放入其中。该结构公开了一个方法,
Execute,然后调用传递适当参数的真实方法。 -
可能我没看懂你的问题,但是在调用
TestN("Test", 1)时,t3的值应该是多少?null?调用是否应该失败? -
您的目标仅仅是摆脱显式委托类型声明吗?
-
不清楚(至少对我而言)您如何处理不同的签名。似乎 TestN 会失败,因为 t3 不是可选的。您在什么时候知道参数的值是多少?
标签: c# methods parameters delegates action