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:

public class VarHacking{

    private class var{

        public string Message { get; set; }

    }

    public void StrangeMethod()
    {
        var var = new var{
             Message = "You're mine...",
        };
    }
}

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.


public class var {}

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


public class dynamic {}

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