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?
varis 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:
so as it’s 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 Lippert’s blog
It is interesting to note that since the set of keywords was decided upon in C#1.0 there have been no additions, so as to preserve backward compatibility.