加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 隐式运算符优先于ToString()方法吗?

发布时间:2020-12-15 22:09:58 所属栏目:百科 来源:网络整理
导读:参见英文答案 Order of implicit conversions in c#????????????????????????????????????1个 请考虑以下代码: public class Test{ public static implicit operator int(Test t) { return 42; } public override string ToString() { return "Test here!";
参见英文答案 > Order of implicit conversions in c#????????????????????????????????????1个
请考虑以下代码:

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?
隐式运算符优先于ToString()吗?

解决方法

是.隐式运算符优先于显式运算符.语言规范声明隐式运算符不应该丢失信息,而显式运算符允许这样做.例如,参见 MSDN explicit.如果将隐式关键字更改为显式,您将在此处看到Test! 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!"

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读