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

Kap*_*pol 7 c# var

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

public class var // no problem here
{
}
Run Code Online (Sandbox Code Playgroud)

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

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();
       }
    }
}
Run Code Online (Sandbox Code Playgroud)

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

Kap*_*pol 2

为了让它简短

如果命名类,则无法使用隐式变量声明var

难道 C# 设计团队就不能禁止这样的类命名以避免代码混乱吗?

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