我只是想知道是否有人知道您不允许使用隐式或显式运算符的接口的原因?
E.g。这会引发编译时错误:
public static explicit operator MyPlayer(IPlayer player)
{
...
}
“不允许用户定义到接口或来自接口的转换”
谢谢,
答案 0 :(得分:32)
Section 10.9.3 of the C# spec说明了这一点。简短版本是不允许的,以便用户可以确定引用类型和接口之间的转换是成功的,当且仅当引用类型实际实现该接口时,并且当发生转换时实际引用相同的对象时。
在引用类型之间定义隐式或显式转换会使用户期望引用会发生更改;毕竟,相同的参考不能是两种类型。另一方面,用户不对引用类型和接口类型之间的转换具有相同的期望。
不允许用户定义的转换从 interface-types 转换或转换为 interface-types 。特别是,此限制可确保在转换为 interface-type 时不会发生用户定义的转换,并且仅当对象存在时,转换为 interface-type 才会成功convert实际上实现了指定的接口类型。