fbpx
devstyle.pl - Blog dla każdego programisty
devstyle.pl - Blog dla każdego programisty
< 1 minut

Słowa kluczowe jako identyfikatory w C#


25.03.2010

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:  }
0 0 votes
Article Rating
7 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
mt3o
14 years ago

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ć?

procent
14 years ago

@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 usprawiedliwić w jakiś racjonalny sposób to bym nie potrafił, tak po prostu zrobiłem.

Paweł Łukasik
14 years ago

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ł

ll
ll
14 years ago

tylko po co to?

PiotrB
14 years ago

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();
}

dario-g
14 years ago

Po co to? Ano naprzyklad po to:

<%=Html.TextBoxFor(x => x.Name, new { @class = "text", maxlength = 200 })%>

procent
14 years ago

No i jest odpowiedź "po co" – dzięki, sam się czegoś dowiedziałem :).

Kurs Gita

Zaawansowany frontend

Szkolenie z Testów

Szkolenie z baz danych

Książka

Zobacz również