微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c# – 隐式强制转换为Func或Action代理?

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

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

解决方法

不,C#不允许将其作为语言的一部分.在封面下,CLI使用call和callvirt指令来调用方法或间接调用委托.

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐