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?
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.
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).
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With