Słowa kluczowe jako identyfikatory w C#

25 marca 2010 08:28 w kategorii: pro
Tagi:

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:  }

Komentarze

dotnetomaniak.pl

25 marca 2010 02:50

Trackback from dotnetomaniak.pl

Maciej Aniserowicz | Słowa kluczowe jako identyfikatory w C#

mt3o

25 marca 2010 09:35

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

25 marca 2010 09:48

@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: www.maciejaniserowicz.com/.../...ation-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

25 marca 2010 10:13

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

25 marca 2010 11:33

tylko po co to?

PiotrB

25 marca 2010 15:48

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

25 marca 2010 17:51

Po co to? Ano naprzyklad po to:

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

procent

25 marca 2010 19:39

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

Komentarze zamknięte