带有自定义类的C#Action委托

时间:2015-06-30 04:14:40

标签: c#

当我没有显式传递引用方法的输入参数类型时,Action委托自定义类如何工作:

DirectMethodCall.PassMethod(x=>x.NoReturnOneParameterMethod(1));
public static void PassMethod(Action<NewClass> c)
{
   NewClass op = new NewClass();
   c(op);
}

为什么我需要将“op”传递给Action委托?

2 个答案:

答案 0 :(得分:1)

由于发布代码示例的评论有点混乱,我会继续这里。

您不是在重复代码,而是误解了您实际编码的内容。 public static void PassMethod(Action<NewClass> c)表示 PassMethod需要作为参数在NewClass对象上执行的方法。

也许这会让它更清晰:

void Main()
{
    //I am defining the implementation of a method which requires as integer as a parameter, but I don't actually invoke it, just define it.
    ExecuteMethod(i => Console.WriteLine(i));
}

public static void ExecuteMethod(Action<int> method)
{
    //I don't know what method does, all I know is that I am running it with the number 5.
    method(5);
}

ExecuteMethod采用需要整数的方法。它不知道该方法的作用。它只知道它需要一个int,它传递值5

实际代码来自来电者:

i => Console.WriteLine(i)

此处,i设置为5,因此结果为5将打印到控制台。

答案 1 :(得分:0)

您的PassMethod期待一个委托接受一个NewClass类型的参数,并使用参数NoReturnOneParameterMethod()调用1并返回类型为void

Action<T>表示它是一个委托,它以T类型作为参数,返回类型为void

请参阅:MSDN Action