Może nas czasami najść ochota na nazwanie jakieś zmiennej czy klasy słowem kluczowym, zarezerwowanym w C#. Standardowa deklaracja, taka jak ta:
1: public class class 2: { 3: 4: }
zakończy sie błędem kompilacji.
Rozwiązaniem problemu jest wstawienie małpy przed danym identyfikatorem… i już możemy nazywać wszystko jak nam się żywnie podoba:
1: public class @class 2: { 3: 4: }
Nie przegap kolejnych postów!
Dołącz do ponad 9000 programistów w devstyle newsletter!
A potem słowo class bez małpy będzie oznaczało to, co normalnie oznacza, czy naszą klasę? Jeśli to, co zwykle, to czy można pisać _class zamiast @class? Albo stosować inny dozwolony znak jako przedrostek?
Czy nazywanie klasy tak jak element składni nie jest błędem zaburzającym czytelność kodu? Po co to robić?
@mt3o: Na poziomie C# odwołujemy się do takiego elementu tak samo jak go zadeklarowaliśmy, z @. Można stosować jakikolwiek inny przedrostek, z tą różnicą, że identyfikatory z małpą (czyli np. ‘@class’) na poziomie IL są już widoczne jako identyfikatory bez małpy (czyli normalnie ‘class’) – można sobie to obejrzeć Reflectorem. Pytanie "po co to robić" jest jak najbardziej słuszne:). W sumie to ciekawostka, która niekoniecznie musi się przydać w przyszłości. Ja używam tego tylko w jednym scenariuszu: ApplicationEvents. Podczas opisywania mechanizmu (tutaj: http://www.maciejaniserowicz.com/post/2009/09/07/Application-Events.aspx ) zamieniłem "@event" na "e", ale w kodzie parametr reprezentujący zdarzenie nazywam właśnie "@event". Jeśli miałbym to… Read more »
Przykład z @event to także jedyna sytuacja, w którym ja stosuję małpkę poprzedzając nazwę. W innym przypadku poprzedzanie słów kluczowych @ nie ma chyba sensu.
Pozdrawiam,
Paweł
tylko po co to?
chyba jeszcze do integracji z projektami w innych językach: kod VB.NET: Imports System.Windows.Forms Public Class Class1 Public Sub bealed() MessageBox.Show("bealed") End Sub Public Sub sealed() MessageBox.Show("sealed") End Sub End Class wywołujący kod C#: private static void tester() { ClassLibrary1.Class1 c = new ClassLibrary1.Class1(); c.bealed(); c.@sealed(); }
Po co to? Ano naprzyklad po to:
<%=Html.TextBoxFor(x => x.Name, new { @class = "text", maxlength = 200 })%>
No i jest odpowiedź "po co" – dzięki, sam się czegoś dowiedziałem :).