Zabawy z var-em

Nie zdążyłem dotrzeć przed oblicze komputera na czas aby obejrzeć JetBrainsowy webinar z Johnem Skeetem 🙁

…no właśnie, zaintrygowało mnie “private class named var”

Napisałem taki kawałek kodu:

[csharp]
public class VarHacking{

private class var{

public string Message { get; set; }

}

public void StrangeMethod()
{
var var = new var{
Message = "You’re mine…",
};
}
}
[/csharp]

i jak się okazuje jest on całkiem poprawny. Kompiluje się i działa. var var = new var zabija. Ale ten kawałek kodu ma jeszcze ciekawszą właściwość, jak klasę var zdefiniujemy normalnie – na zewnątrz a nie jako wewnętrzną to również wszystko działa 😉 tzn mniej więcej działa.

[csharp]

public class var {}

[/csharp]

się pięknie kompiluje, tylko psuje inne linikji kodu z var-em 🙂 aż żal,  że już po pierwszym kwietnia.

W całej tej zabawie w sumie nie ma, żadnej magii czy błędu. var nie jest zarezerwowanym słowem języka c# a jedynie słowem kontekstowym, z którym kompilator robi małe hokus pokus. Takie same jaja można sobie zrobić z dynamica

[csharp]

public class dynamic {}

[/csharp]

reszta słów kontekstowych nie jest już taka wdzięczna 🙂 Tak czy inaczej, miłej zabawy