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
有没有一种很好的方法可以让一个人自己的类的对象直接在其基础实例上接受函数式参数(参数)?有点像索引器,但用括号而不是方括号?
答案 0 :(得分:1)
不,C#不允许将其作为语言的一部分。在幕后,CLI使用call
和callvirt
指令来调用方法,或间接调用委托。
因此,与Python不同,您可以通过声明callable
方法来创建类def __call__
的实例,但C#没有类似的功能。