首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为什么可以创建一个名为"var“的类?

为什么可以创建一个名为"var“的类?
EN

Stack Overflow用户
提问于 2012-05-11 17:41:10
回答 3查看 3.1K关注 0票数 103

var不是C#中的关键字吗?但是为什么我可以这样做:

代码语言:javascript
复制
public class var { }

public class main
{
    public static void main(string[] args)
    {
        var testVar = new var();
    }
}

代码中使用的var是在main类之前声明的var类。编译器甚至不会抱怨。

而当我这样做的时候:

代码语言:javascript
复制
public class int { }

或者这样:

代码语言:javascript
复制
public class true { }

编译器说inttrue是一个关键字,不能那样使用。为什么与var不一样?

EN

回答 3

Stack Overflow用户

发布于 2012-05-11 17:59:42

另一种看待这个问题的方法是:"var“作为关键字并没有出现在C#的第一个版本中(与"int”和“true”不同),因此您当时可能已经编写了一些代码,其中包含一个名为"var“的类。这是完全合法的。后来,当" var“被添加到语言中时,设计者非常友好,只在特定的上下文中将其作为关键字,所以现有的var类仍然可以工作。

这是语言设计的真正挑战之一-如何在不破坏现有代码的情况下添加新功能,并且不会使新功能使用起来很麻烦。

票数 12
EN

Stack Overflow用户

发布于 2012-05-11 17:45:41

在版本3之前的C#版本中,implicitly typed local variables还不受支持,因此var没有特殊的含义,并且可以定义名为var的变量和类。您的示例程序是合法的,因为main中出现的两个var都引用了var类。

C# 3和更高版本是向下兼容的,因此在版本3之前用C#编写的代码仍然可以使用新的编译器编译。

inttrue是从C# 1开始的关键字。

票数 8
EN

Stack Overflow用户

发布于 2012-05-12 00:22:42

关键字可以在上下文中保留。当解析源代码时,该上下文被建立为解析树的一部分。关键字的评估是在该上下文中进行的。因此,在这种情况下,var不在保留上下文中,并且与在赋值语句中使用它时的含义不同。我相信这种灵活性的一个原因是var是在C# 3中引入的,所以让它到处保留可能会破坏一些程序的向后兼容性,而使用它作为变量类型声明在早期版本中是不会编译的,所以没有破坏。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10548988

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档