C # ‚dynamische‘ Schlüsselwort ... ist es wirklich ein reserviertes Schlüsselwort oder nur eine Kennung, die Mittel, um etwas Besonderes, wenn als Typ verwendet?

StackOverflow https://stackoverflow.com/questions/2124001

Frage

Ich habe einen C # 4.0-Parser. Er akzeptiert ‚dynamisch‘ als Schlüsselwort als Typ. Mein Parser stolpert über Aussagen gefunden C # 3.0 Programme der Form in der Arbeit:

dynamic = <exp> ;

Also, es dynamisch wirklich ein Stichwort? Oder kann es noch als willkürliche Bezeichnernamen verwendet werden? (Wenn ja, warum nicht ‚int‘ die gleiche Art und Weise behandelt werden)?

Gibt es eine irgendwo spec Referenz, dass die Staaten, ob dynamischen Keyword? Die neueste ECMA C # 4-Spezifikation nicht einmal erwähnt ‚dynamisch‘ und das Beste, was ich an der MS-Website finden kann, ist eine „vorläufige Spezifikation“, das besagt, es ist ein Schlüsselwort, aber ich vermute, das ist nur schlampig schriftlich.

War es hilfreich?

Lösung

dynamic ist ein Kontext Stichwort als von C # 4.0. Die vierte Ausgabe des ECMA C # spec bezieht sich nicht auf C # 4.0. (Beachten Sie das 2006 Veröffentlichungsdatum.)

MSDN beschreibt es als Schlüsselwort.

Es ist auch in diesem Tabelle kontextuelle keywords . (Nach unten scrollen).

Andere Tipps

Es ist kein "normales" Stichwort wie if, for etc.

Es ist ein Kontext Schlüsselwörter wie yield, from etc.

Insbesondere diese compiliert:

object dynamic = 0; // dynamic is a contextual keyword

, aber das bedeutet nicht:

object string = 0; // string is a regular keyword

Sie würden müssen "escape" string wie folgt aus:

object @string = 0;

Das macht sehr viel Sinn in Bezug auf die Abwärtskompatibilität: es unwahrscheinlich ist, dass viele Menschen eine erstellt haben wird type genannt dynamic (die Mehrdeutigkeit verursachen würde; IIRC die „echten“ Typ gewinnt in diesem Fall ), während es uns sehr wahrscheinlich, dass vorhandene Code verwendet Variablen genannt dynamic.

In gewisser Weise ist es nicht einmal ein Kontext Stichwort sein muß (und ich glaube nicht, die Spezifikation jemals ausdrücklich als solche bezeichnet) - Sie davon, wie der Name eines Typs, der immer verfügbar ist, denken (wie string und object). Ich könnte mir vorstellen, dass string etc gemacht wurden Stichworte von v1 Um Verwirrung zu vermeiden, aber das Hinzufügen echte Keywords (die nicht als Bezeichner verwendet werden kann) würde nun eine hohe Kompatibilität Kosten hat.

Es ist ein Schlüsselwort. (siehe bearbeiten unten) Ich bin ein wenig verwirrt darüber, was Sie unter „warum nicht‚int‘die gleiche Art und Weise behandelt?“

Sie können nicht dies tun: int int = 5;

Aber Sie können dies tun, obwohl es ist keine gute Praxis: int @int = 5;

Die Sean Devlin Post ). Siehe Screenshot unten .NET 4.0 Beta mit

dynamic

Schauen Sie sich Chris Burrow Blog-Post . Ein interessantes Zitat aus dem Beitrag:

  

Wie Sie sehen können, die öffentlich sichtbar   Mitglieder, die den Typ verwenden dynamische   tatsächlich, hinter den Kulissen, verwenden Sie die   Type-Objekt, wenn sie abgegeben werden.   Es gibt keinen Gerüsttyp „dynamisch“.   diese „Objekte“ sind jedoch alle   derart eingerichtet, dass die   Compiler (oder jemand anderes) kann sagen,   dass sie behandelt werden soll   dynamisch.

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