4

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

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

4

1 回答 1

2

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

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

于 2012-07-22T00:29:00.840 回答