考虑以下代码:
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!"
为什么在前三种情况下我们有答案42
即使我们明确地转换为Test
?
Does implicit
运算符具有更高的优先级ToString()
?
是的。隐式运算符优先于显式运算符。语言规范规定隐式运算符不应丢失信息,而显式运算符则允许这样做。例如,参见MSDN明确 http://msdn.microsoft.com/en-us/library/z5z9kes2.aspx。如果你改变关键词implicit
to 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!"
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)