我需要传递委托应该调用的委托和方法名作为类构造函数的参数我该怎么做?
即如果
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:忽略访问修饰符
答案 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");