Nie zdążyłem dotrzeć przed oblicze komputera na czas aby obejrzeć JetBrainsowy webinar z Johnem Skeetem 🙁
Big thanks to @jonskeet for the Webinar (and the private class named var). Thank you to everyone that attending. Recording available soon.
— JetBrains ReSharper (@resharper) 9 kwietnia 2013
…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