Cio*_*tin -5 c# overriding explicit implicit
public static explicit operator int(Author a)
{
return a.Publications.Length;
}
public static implicit operator int(Author a)
{
return a.Publications.Length;
}
Run Code Online (Sandbox Code Playgroud)
为什么我不这样做?我的老师让我覆盖了Author类的operator int的隐式和显式转换.+我可以得到深拷贝的解释:D?
为什么我不这样做?
你不能这样做,因为C#规范说你不能,在10.10.3节.
[...]类或结构不能声明具有相同源和目标类型的隐式和显式转换运算符.
现在你可能会说:
用"因为这就是规范中的内容"回答"为什么"的问题是非常不满意的.
你问了一个模糊的问题.如果您想要更具体的答案,请提出更具体的问题.怎么样:
在创建此规则时,C#设计团队可能考虑了哪些因素?
任何隐式转换都已经是合法的显式转换.也就是说,如果存在允许的隐式转换:
Shape s = whatever;
Fruit f = s;
Run Code Online (Sandbox Code Playgroud)
然后
Fruit f = (Fruit)s;
Run Code Online (Sandbox Code Playgroud)
也是合法的,必须意味着同样的事情.如果这两个语句具有不同的语义,那将是奇怪的,但是在一个你可以声明相同转换的两个不同版本的世界中,一个是显式的,一个是隐式的,那么编译器必须检测这种情况并确保正确的转换是用过的.
转换逻辑,特别是用户定义的转换逻辑,在C#中非常复杂.消除不必要的,令人困惑的并发症是一个好主意.
我可以获得深层复制的解释吗?
不要在一个问题中提出两个问题.如果您有第二个问题,请发布第二个问题.