繁体   English   中英

运算符的显式和隐式 (int)

[英]Explicit and implicit for operator (int)

public static explicit operator int(Author a)
    {
        return a.Publications.Length;
    }
    public static implicit operator int(Author a)
    {
        return a.Publications.Length;
    }

为什么我不能这样做? 我的老师要求我为 Author 类覆盖 operator int 的隐式和显式转换。 + 我可以得到深拷贝的解释吗:D?

为什么我不能这样做?

您不能这样做,因为 C# 规范在第 10.10.3 节中说您不能这样做。

[...] 类或结构不能声明具有相同源类型和目标类型的隐式和显式转换运算符。

现在你可能会说:

用“因为规范中是这么说的”来回答“为什么”的问题是非常令人不满意的。

你问了一个模糊的问题。 如果您想要更具体的答案,请提出更具体的问题。 怎么样:

C# 设计团队在创建此规则时可能会考虑哪些因素?

任何隐式转换都已经是合法的显式转换。 也就是说,如果存在允许的隐式转换:

Shape s = whatever;
Fruit f = s;

然后

Fruit f = (Fruit)s;

也是合法的,必须是同一个意思 如果这两个语句具有不同的语义,那就太奇怪了,但是在一个可以声明同一转换的两个不同版本(一个显式和一个隐式)的世界中,编译器必须检测这种情况并确保正确的转换是用过的。

转换逻辑,尤其是用户自定义的转换逻辑,在 C# 中极其复杂。 消除不必要的、令人困惑的并发症是一个好主意。

我可以得到深拷贝的解释吗

不要在一个问题中问两个问题。 如果您有第二个问题,请发布第二个问题。

我怀疑您看到了编译器错误CS0557

仅供参考,如果您有一个隐式运算符,则也不需要显式运算符。 隐式意味着不需要进行直接转换。

显式:

Author a = new Author();
int i = (int)a;

隐含:

Author a = new Author();
int i = a;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM