隐式运算符是否比 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()

隐式运算符是否比 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!"