运算符 (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第二个问题如果你有第二个问题。
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第二个问题如果你有第二个问题。