Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么可以';我不能使用带有显式运算符的接口吗?_C#_.net_Type Conversion_Explicit - Fatal编程技术网

C# 为什么可以';我不能使用带有显式运算符的接口吗?

C# 为什么可以';我不能使用带有显式运算符的接口吗?,c#,.net,type-conversion,explicit,C#,.net,Type Conversion,Explicit,我只是想知道是否有人知道为什么不允许使用隐式或显式运算符的接口 例如,这会引发编译时错误: public static explicit operator MyPlayer(IPlayer player) { ... } “不允许与接口进行用户定义的转换” 谢谢,详细说明了这一点。简短的版本是,它是不允许的,这样用户就可以确定引用类型和接口之间的转换是否成功,如果且仅当引用类型实际实现了该接口,并且当转换发生时,同一对象实际上正在被引用 定义引用类型之间的隐式或显式转换可以让用户预期引用将发

我只是想知道是否有人知道为什么不允许使用隐式或显式运算符的接口

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

public static explicit operator MyPlayer(IPlayer player)
{
 ...
}
“不允许与接口进行用户定义的转换”

谢谢,

详细说明了这一点。简短的版本是,它是不允许的,这样用户就可以确定引用类型和接口之间的转换是否成功,如果且仅当引用类型实际实现了该接口,并且当转换发生时,同一对象实际上正在被引用


定义引用类型之间的隐式或显式转换可以让用户预期引用将发生更改;毕竟,同一引用不能同时是两种类型。另一方面,用户对引用类型和接口类型之间的转换没有相同的期望

用户定义的转换不允许从接口类型转换或转换为接口类型。特别是,此限制可确保在转换为接口类型时不会发生用户定义的转换,并且仅当要转换的对象实际实现了指定的接口类型时,才能成功转换为接口类型


最简单的方法是,只需为您的具体类实现接口:)另请参见,让我们开始在接口成员定义中既不允许
public
也不允许
static
。。“定义引用类型之间的隐式或显式转换会让用户期望引用类型会发生更改“很好的解释!这解释了为什么语言设计团队阻止隐式转换为接口类型。你知道他们为什么另外决定限制接口类型的转换吗?这仅仅是为了对称吗?是的,无法从接口转换为严格类型是一个非常恼人的缺失特性。特别是对于JSON.NET这样的东西,它将尝试强制转换它,而您基本上不能,因为C#不允许用户定义将反序列化接口转换为具体类型。