Frage

Ich entdeckte, dass Sie Ihre Variablennamen mit einem Zeichen ‚@‘ in C # beginnen. In meinem C # Projekt wurde ich mit einem Web-Service (ich einen Web-Verweis auf mein Projekt hinzugefügt), die in Java geschrieben wurden. Eine der Interface-Objekte in der WSDL definiert hatte eine Membervariable mit dem Namen „params“. Offensichtlich ist dies ein reserviertes Wort in C #, so dass Sie nicht eine Klasse mit einer Membervariable mit dem Namen „params“ haben können. Das Proxy-Objekt, das erzeugt wurde, enthielt eine Eigenschaft, die wie folgt aussah:

public ArrayList @params {
    get { return this.paramsField; }
    set { this.paramsField = value; }
}

Ich suchte durch die VS 2008 c # Dokumentation konnte aber nichts darüber finden. Auch Google-Suche hat mir keine nützliche Antworten. Was ist also die genaue Bedeutung oder Verwendung der Zeichen ‚@‘ in einer Variablen / Eigenschaftsnamen?

War es hilfreich?

Lösung

Gerade vom C # Language Specification Identifiers (C #) :

  

Das Präfix „@“ ermöglicht die Verwendung von   Schlüsselwörter als Bezeichner, die ist   nützlich, wenn sie mit anderen Schnittstellen   Programmiersprachen. Der Charakter @   ist nicht wirklich von dem Teil   Kennung, so dass die Kennung könnte sein,   in anderen Sprachen als normal angesehen   Kennung, ohne das Präfix. Ein   Identifikator mit einem @ Präfix aufgerufen   wörtliche Kennung.

Andere Tipps

Es läßt nur Sie ein reserviertes Wort als Variablennamen verwenden. Nicht IMHO empfohlen (außer in Fällen wie Sie haben).

In C # die bei (@) Zeichen wird verwendet, Literale zu bezeichnen, die ausdrücklich auf die einschlägigen Vorschriften nicht in der Sprache spec halten.

Insbesondere kann es für Variablennamen verwendet werden, die mit reservierten Schlüsselwort kollidieren (z können Sie nicht params verwenden, aber Sie können @params verwenden Sie stattdessen, das gleiche mit out / ref / einem anderen Suchbegriff in der Sprachspezifikation). Zusätzlich kann es für unescaped Stringliterale verwendet werden; Dies ist besonders relevant, mit Pfad Konstanten, z.B. statt path = "c:\\temp\\somefile.txt" können Sie path = @"c:\temp\somefile.txt" schreiben. Es ist auch wirklich nützlich für reguläre Ausdrücke.

Im Gegensatz zu Perl sigils, ein @ Präfix vor einem Variablennamen in C # hat keine Bedeutung. Wenn x eine Variable, @x ist ein anderer Name für die gleiche Variable.

> string x = "abc";
> Object.ReferenceEquals(x, @x).Dump();
True

Aber der @ Präfix hat einen verwenden , wie Sie entdeckt haben - Sie können es verwenden, um Variablennamen zu klären, die C # sonst als illegal ablehnen würden.

> string string;
Identifier expected; 'string' is a keyword

> string @string;

Das @ Symbol ermöglicht es Ihnen reservierte Schlüsselwörter für Variablennamen zu verwenden. wie @int, @string, @double etc.

Zum Beispiel:

string @public = "Reserved Keyword used for me and its fine";

Der obige Code funktioniert gut, aber unten wird nicht funktionieren:

string public = "This will not compile";

Es ist einfach können Sie reservierte Wörter als Variablennamen verwenden. Ich wollte einen var event den anderen Tag genannt. Ich wollte mit _event gehen, statt, aber mein Kollege erinnerte mich, dass ich konnte es einfach anrufen @event statt.

Ein weiterer Anwendungsfall ist in Erweiterungsmethoden. Der erste, spezielle Parameter unterschieden werden, um seine wahre Bedeutung mit @this Namen zu bezeichnen. Ein Beispiel:

public static TValue GetValueOrDefault<TKey, TValue>(
    this IDictionary<TKey, TValue> @this,
    TKey key,
    TValue defaultValue)
    {
        if (!@this.ContainsKey(key))
        {
            return defaultValue;
        }

        return @this[key];
    }

Wenn wir ein Schlüsselwort als Name für einen Bezeichner verwenden wir einen Compiler-Fehler „Bezeichner erwartet‚Bezeichner Name‘ist ein Schlüsselwort“ Um diesen Fehler zu überwinden, als Präfix die Kennung mit „@“. Solche Kennungen sind wörtlich Identifikatoren. Das Zeichen @ ist nicht wirklich Teil der Kennung, so dass die Kennung könnte ohne das Präfix in anderen Sprachen als normale Kennung, gesehen wird

Sie können es verwenden, um die reservierten Schlüsselwörter als Variablennamen zu verwenden, wie

 int @int = 3; 

wird der Compiler die @ ignoriert und die Variable als int kompilieren

Es ist keine gängige Praxis Gedanken verwenden

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top