为什么我不能使用带显式运算符的接口?
我只是想知道是否有人知道你不允许使用隐式或显式运算符的接口的原因?
例如,这会引发编译时错误:
public static explicit operator MyPlayer(IPlayer player) { ... }
“不允许在接口之间进行用户定义的转换”
谢谢,
C#规范的第10.9.3节解释了这一点。 简短版本是不允许的,以便用户可以确定引用类型和接口之间的转换是成功的,当且仅当引用类型实际实现该接口时,并且当转换发生时实际引用相同的对象时。
定义引用类型之间的隐式或显式转换使用户期望引用会发生更改; 毕竟,相同的参考不能是两种类型。 另一方面,用户对引用类型和接口类型之间的转换没有相同的期望。
不允许用户定义的转换从接口类型转换或转换为接口类型 。 特别是,此限制确保在转换为接口类型时不会发生用户定义的转换,并且只有在转换的对象实际实现指定的接口 类型时,才能成功转换为接口类型 。
- 你如何使用技术(描述)来处理.Net的C结构和指针?
- Winforms数据绑定:可以使用TypeConverter而不是Format / Parse事件吗?
- 在窗体最大化时自动缩放子控件
- Word Automation – 禁用警报
- .Net 3.5上的Web服务客户端应用程序的SSL和过时TLS(1.0和1.1)
- 如何在StructureMap中发布HybridHttpOrThreadLocalScoped对象?
- 正则表达式匹配除crlf之外的全行文本
- 如何使用.net compact framework 3.5在数据网格中隐藏列
- Dotnet webclient超时但浏览器为json webservice工作文件