隐式运算符是否比 ToString() 方法具有更高的优先级
本文关键字:优先级 方法 运算符 是否 ToString | 更新日期: 2023-09-27 18:32:23
请考虑以下代码:
public class Test
{
public static implicit operator int(Test t) { return 42; }
public override string ToString() { return "Test here!"; }
}
var test = new Test();
Console.WriteLine(test); // 42
Console.WriteLine((Test)test); // 42
Console.WriteLine((int)test); // 42
Console.WriteLine(test.ToString()); // "Test here!"
为什么在前三种情况下,即使我们明确投向Test
,我们也有答案42
?implicit
运算符的优先级是否高于ToString()
?
是的。隐式运算符优先于显式运算符。语言规范指出,隐式运算符不应丢失信息,而显式运算符则允许这样做。例如,请参阅 MSDN 显式。如果将关键字implicit
更改为explicit
您将看到Test here!
3 次,42 次一次。
public class Test
{
public static explicit operator int(Test t) { return 42; }
public override string ToString() { return "Test here!"; }
}
var test = new Test();
Console.WriteLine(test); // "Test here!"
Console.WriteLine((Test)test); // "Test here!"
Console.WriteLine((int)test); // 42
Console.WriteLine(test.ToString()); // "Test here!"