我正在使用一个需要对字符串使用隐式运算符的结构,并且遇到了一个我没有考虑过的基本问题。
public static implicit operator Version (string value) {...}
我可以理解只有显式运算符来强制强制转换,但如果隐式运算符已经重载,我想不出你需要它的情况。有吗?
我正在使用一个需要对字符串使用隐式运算符的结构,并且遇到了一个我没有考虑过的基本问题。
public static implicit operator Version (string value) {...}
我可以理解只有显式运算符来强制强制转换,但如果隐式运算符已经重载,我想不出你需要它的情况。有吗?
没有。实际上,您不能为同一转换同时定义隐式和显式转换运算符。这是一个编译时错误:
public class Foo
{
public static implicit operator Foo(string value)
{
Console.WriteLine("implicit");
return null;
}
public static explicit operator Foo(string value)
{
Console.WriteLine("Explicit");
return null;
}
}
它给出了以下错误:
类型中重复的用户定义转换
...
如果定义隐式转换,则可以写出显式转换,它将使用隐式转换的代码进行转换,但是无法为隐式转换和显式转换定义执行不同操作的代码。