使用Common Delegate在不同的类中调用多个方法

时间:2010-12-21 15:22:34

标签: c# delegates

我需要传递委托应该调用的委托和方法名作为类构造函数的参数我该怎么做?

即如果

public delegate object CCommonDelegate();

是我的代表,并说它可以调用此签名后的任何方法

string Method1();

object Method2();

class X
{
    public X(CCommonDelegate,"MethodName to invoke"){}  //how to pass the Method name here..

}

P.S:忽略访问修饰符

2 个答案:

答案 0 :(得分:4)

委托是一个包含可以调用的东西的变量。如果X是一个需要能够调用某个东西的类,那么它需要的就是委托:

public delegate object CommonDelegate();

class X
{
    CommonDelegate d;

    public X(CommonDelegate d)
    {
        this.d = d; // store the delegate for later
    }
}

稍后它可以调用代理:

var o = d();

顺便说一句,您不需要定义这样的委托。类型Func<Object>已经存在且具有正确的结构。

根据两个示例方法构造X:

string Method1()
object Method2()

你可以说

var x = new X(obj.Method2);

obj是具有Method2的类的对象。在C#4中,您可以对Method1执行相同的操作。但在3中你需要使用lambda进行转换:

var x = new X(() => obj.Method1);

这是因为返回类型不完全相同:它与继承相关。这仅在C#4中自动运行,并且仅在您使用Func<object>

时才有效

答案 1 :(得分:2)

为什么不让你的构造函数采用Func< object>

public class x
{
     public x(Func<object> func)
     {
           object obj = func();
     }
}

然后

x myX = new x(()=> "test");