Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why can I create a class named "var"?

Tags:

c#

.net-4.0

Isn't var a keyword in C#? But why can I do this:

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

The var that is used in the code is the var class that is declared before the main class. And the compiler doesn't even complain.

While when I do this:

public class int { } 

or this:

public class true { } 

The compiler said that int or true is a keyword and cannot be used like that. Why is it not the same with var?

like image 493
John Isaiah Carmona Avatar asked May 11 '12 09:05

John Isaiah Carmona


2 Answers

var is not a keyword according to this list.

it is a contextual keyword, so from the context the compiler is able to decide which is your class and which is the contextual keyword, and no confusion arises.

a contextual keyword is:

used to provide a specific meaning in the code, but it is not a reserved word in C#.

so as its not reserved you can use it.

As pointed out in the comments above there is a discussion of the differences as well as a list of the various keywords and contextual keywords added at each version of c# on Eric Lipperts blog

It is interesting to note that since the set of keywords were decided upon in C#1.0 there have been no additions, so as to preserve backwards compatibility.

like image 187
Sam Holder Avatar answered Sep 20 '22 03:09

Sam Holder


The compiler is smart enough to know that the context you are using var as a class name is never a context for the keyword so allows it (which is why it is defined as a contextual keyword).

like image 33
Oded Avatar answered Sep 22 '22 03:09

Oded