31

我只是想知道是否有人知道您不允许使用带有隐式或显式运算符的接口的原因?

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

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

“不允许用户定义的与接口之间的转换”

谢谢,

4

1 回答 1

39

C# 规范的第 10.9.3 节详细说明了这一点。简短的版本是它是不允许的,以便用户可以确定当且仅当引用类型实际实现该接口时,引用类型和接口之间的转换成功,并且当该转换发生时,实际上引用了相同的对象。

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

用户定义的转换不允许从或转换为interface-types。特别是,此限制确保在转换为 interface-type 时不会发生用户定义的转换并且仅当正在转换的对象实际实现指定的 interface-type 时,才能成功转换为interface -type

于 2010-03-12T14:09:15.013 回答