对Func或Action代表的隐式强制转换?

时间:2012-07-22 00:11:18

标签: c# casting delegates implicit func

C#允许您为委托类型定义隐式强制转换:

class myclass
{
    public static implicit operator Func<String, int>(myclass x)
    {
        return s => 5;
    }
    public static implicit operator myclass(Func<String, int> f)
    {
        return new myclass();
    }
}

但不幸的是,我们不能用它来使对象看起来像一个函数:

var xx = new myclass();
int j = xx("foo");    // error
Action<Func<String, int>> foo = arg => { };
foo(xx);              // ok

有没有一种很好的方法可以让一个人自己的类的对象直接在其基础实例上接受函数式参数(参数)?有点像索引器,但用括号而不是方括号?

1 个答案:

答案 0 :(得分:1)

不,C#不允许将其作为语言的一部分。在幕后,CLI使用callcallvirt指令来调用方法,或间接调用委托。

因此,与Python不同,您可以通过声明callable方法来创建类def __call__的实例,但C#没有类似的功能。