c# – 为什么不能使用显式操作符的界面? [重复]

这个问题已经在这里有一个答案:            >            Why isn’t it possible to define implicit cast operator from interface to class?                                    2答案                                我只是想知道有没有人知道你为什么不允许与隐式或显式运算符使用接口的原因?

例如。这会引发编译时错误:

public static explicit operator MyPlayer(IPlayer player)
{
 ...
}

“不允许用户定义的转换到或从界面转换”

谢谢,

Section 10.9.3 of the C# spec说明了这一点。简短版本是不允许的,以便用户可以确定参考类型和接口之间的转换是否成功,当且仅当引用类型实际实现该接口时,以及当该转换发生时,实际上被引用相同的对象。

定义参考类型之间的隐式或显式转换给用户预期参考的变化;毕竟,相同的引用不能是两种类型。另一方面,用户对参考类型和接口类型之间的转换没有相同的期望。

User-defined conversions are not allowed to convert from or to interface-types. In particular, this restriction ensures that no user-defined transformations occur when converting to an interface-type, and that a conversion to an interface-type succeeds only if the object being converted actually implements the specified interface-type.

http://stackoverflow.com/questions/2433204/why-cant-i-use-interface-with-explicit-operator

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:c# – 为什么不能使用显式操作符的界面? [重复]