你能利用名为“var”的类的隐式类型变量吗?

本文关键字:类型变量 var | 更新日期: 2023-09-27 18:06:39

我刚刚发现可以使用关键字var作为类名:

public class var // no problem here
{
}

现在,如果重载隐式强制转换操作符,就可以以一种有趣的方式使用类:

namespace MyApp
{
    class Program
    {
        static void Main(string[] args)
        {
            var x = 1; // var is of type MyApp.var
        }
    }
    public class var
    {
       public implicit operator var(int i)
       {
           return new var();
       }
    }
}

在这种情况下,是否仍然有可能以某种方式使编译器推断类型?这篇博文说这是不可能的(参见以"或者,另一个例子"开头的段落),但也许自2009年以来发生了一些变化?

你能利用名为“var”的类的隐式类型变量吗?

让它更短

如果您将类命名为var,则不可能使用隐式变量声明。

c#设计团队就不能禁止这样命名类来避免混淆代码吗?

不,因为这可能会破坏一些在var的新含义被引入语言之前编写的代码。所有以var作为类名的遗留代码将不再编译。最近我读到向后兼容性对c#设计团队来说是非常重要的。