2009-04-07 4 views
9

Mehrere Male habe ich gesehen, ReSharper Code erzeugen, der wie folgt aussieht:Hat das @ Präfix für Delegaten eine spezielle Bedeutung?

delegate void myHandler(int i); 
myHandler myHandlerContainer; 
... 
foreach (Delegate @delegate in myHandlerContainer.GetInvocationList()) 
{...} 

Ist die '@' in @delegate geben, die Variable eine spezielle semantische Bedeutung?
Oder ist es nur eine Konvention, der ich vorher noch nicht begegnet bin?

Antwort

14

Einige Details von MSDN:

Das Präfix „@“ ermöglicht die Verwendung von Schlüsselwörter als Bezeichner, die nützlich ist, wenn sie mit anderen Programmiersprachen Schnittstelle. Das Zeichen @ ist nicht Teil der Kennung, daher könnte die Kennung in anderen Sprachen als normale Kennung ohne Präfix angezeigt werden. Eine Kennung mit einem @ Präfix heißt eine Verbatim-Kennung. Verwenden Sie das Präfix @ für Bezeichner, die nicht Schlüsselwörter sind erlaubt, aber stark abgeraten als eine Frage des Stils.

von C# Language Specification: 2.4.2 Identifiers.

Das Präfixieren mit '@' ermöglicht daher z.B. von einer Klasse namens "delegate" abzuleiten, die in einer Bibliothek definiert sein könnte, die in einer anderen Sprache als C# geschrieben ist. In jedem anderen Fall würde ich nicht empfehlen, diese Syntax zu verwenden und stattdessen Kennungen zu verwenden, die sich von den C# -Schlüsselwörtern unterscheiden (z. B. Wert anstelle von Wert), um die Lesbarkeit des Codes zu erhöhen und Verwirrung zu vermeiden, wenn ihm eine besondere Bedeutung zugeordnet ist.

Es ist auch eine andere interessante Tatsache über Variablennamen genannt:

Identifiers, die zwei aufeinanderfolgende Unterstrichen (U + 005F) ist zur Verwendung durch die Umsetzung vorbehalten. Eine Implementierung könnte beispielsweise erweiterte Schlüsselwörter bereitstellen, die mit zwei Unterstrichen beginnen.

+0

Ausgezeichnet! Das ist die Referenz, nach der ich gesucht habe :-) – devstuff

12

Der "@delegate" unterscheidet den Variablennamen vom Schlüsselwort "delegate".

Verwandte Themen