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