【发布时间】:2018-06-18 18:59:27
【问题描述】:
这是How do I pass a function pointer delegate for a different class in c#的后续问题
我有课
public class ClassA
{
public void Foo()
{
Console.WriteLine("Foo()");
}
public void Foo(int x, int y)
{
Console.WriteLine("Foo(" + x.ToString() + ", " + y.ToString() + ")" );
}
public void Foo(int x, int y, int z)
{
Console.WriteLine("Foo(" + x.ToString() + ", " + y.ToString() + ", " + z.ToString() + ")" );
}
}
在另一种方法中,我想像这样调用classA的类函数:
ClassA obj = new ClassA();
TakesFun(obj.Foo);
TakesFun(obj.Foo, 1, 2);
TakesFun(obj.Foo, 1, 2, 3);
TakesFun 的语法应该是什么?我想让它成为通用的,以接受许多/任何/无参数并根据参数的数量调用适当的函数?
显然下面的函数语法是错误的,但我正在寻找一个类似的函数。
public static void TakesFun<TParam>(Action<TParam[]> action, params TParam[] paramList)
{
Console.WriteLine("TakesFun");
action(paramList);
}
EDIT1:ClassA Foo 函数只是一个示例。我想调用可以接受任何类型参数的更复杂的函数。 例如:
public void CleanList(List<int> l)
{
l.Clear();
}
【问题讨论】:
-
为什么要这么复杂??只需将属性 x、y 和 z 作为可空整数添加到 ClassA 中,如果 x、y 和 z 为空,则调用 Foo(),如果 z 为空,则调用 Foo(x, y),如果 z 不为空,则调用 Foo(x , y, z)
-
是的,这似乎是一个非常糟糕的设计。可选参数是一个东西,使用它们
-
你能说明一下如何吗?我问这个是因为我是 C# 新手。
-
我正在为非 WPF 和非 GUI 应用程序编写一个等效的线程调度程序,我必须有一个 BeginInvoke 的函数语法,该语法以与 TakesFun 类似的行完成,可以采用动作和参数,然后在稍后运行该函数。我已使用 EDIT1 更新了列表,显示了我想要运行的更多类型的函数。我不能对 ClassA 函数使用可选参数。有关背景的更多详细信息,请参见原帖中的链接。
-
嗯?使用回调/委托。为什么要把事情复杂化……简单是最难掌握的工程原则。
标签: c# parameters