运算符 (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;
    }

为什么我不能这样做?我的老师让我覆盖作者 class 的 operator int 的隐式和显式转换。 + 我能得到深拷贝的解释吗:D?

我怀疑你看到编译器错误 CS0557

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

显式:

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

隐式:

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

why can`t I do this?

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

[...] a class or struct cannot declare both an implicit and an explicit conversion operator with the same source and target types.

现在你可能会说:

Answering a "why" question with "because that's what it says in the spec" is deeply unsatisfying.

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

What factors might the C# design team have considered when creating this rule?

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

Shape s = whatever;
Fruit f = s;

然后

Fruit f = (Fruit)s;

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

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

can I get a explanation for the deep copy

不要在一个问题中问两个问题。 Post第二个问题如果你有第二个问题。