Die using
Richtlinie ermöglicht uns den Zugriff auf Typen ohne Verwendung ihrer vollqualifizierten Namen:
using MyNamespace.Foo.Bar;
Die using
Anweisung fungiert als syntaktischer Zucker für try
/ finally
Blöcke, die sicherstellen, dass Objekte ordnungsgemäß entsorgt werden:
using(var x = new MyDisposableClass()) { ... }
Diese beiden Situationen scheinen nichts miteinander zu tun zu haben. Warum verwenden sie dasselbe Schlüsselwort?
Ich bezweifle, dass irgendjemand jemals die beiden Fälle verwechseln würde, aber es scheint seltsam, kein neues Wort für eine neue Funktionalität zu erstellen.
Nebenbei habe ich auch über die doppelte Verwendung von class
in C ++ gelesen (eine zum Deklarieren von Klassen, eine zum Definieren von Vorlagenparametern), aber der zweite Fall hat schließlich ein eigenes Schlüsselwort erhalten typename
, was für mich sinnvoller ist.
var
Dies ist das klassische Beispiel, bei dem ein In-Scope-Typ mit dem Namenvar
Vorrang vor dem Schlüsselwort hat.g++ --std=c++11
oder Quelldateien die Angabe eines Dialekts zu ermöglichen (wie in Haskell (?), Racket, Perl, sogar Python). Eine Sprache kann auch in entworfen werden Eine Möglichkeit, bei der Schlüsselwörter niemals syntaktisch mit möglichen Bezeichnern in Konflikt geraten, ohne einige Bezeichner zu reservieren (obwohl dies für Ihre normale Sprachimplementierung mit einem LALR-Parser mit einem Lexer im@using
Sprachdesigner versuchen im Allgemeinen, die Anzahl der Schlüsselwörter zu begrenzen. Wenn ein Schlüsselwort reserviert ist, kann es nicht als Kennung im Benutzercode verwendet werden. Dies ist ärgerlich, wenn es nur das Wort ist, das Sie benötigen. Dies ist auch ein Hindernis beim Portieren von Code aus anderen Sprachen - und Microsoft wollte, dass Benutzer Code von Java nach C # portieren. C # hat mehr Schlüsselwörter als Java, aber jedes neue Schlüsselwort würde es schwieriger machen. Darüber hinaus sind die .net-Sprachen so konzipiert, dass sie mit APIs interagieren, die in verschiedenen Sprachen geschrieben sind und möglicherweise nicht dieselben Schlüsselwörter enthalten. Dies führt zu Belästigungen, wenn ein öffentliches Mitglied auch ein Schlüsselwort ist.
Die beiden Verwendungen von
using
sind eindeutig, da sie an Positionen in der Syntax erscheinen. Eine "Verwendung" ist in beiden Fällen ein geeigneter Begriff. Es ist also sinnvoll, dasselbe Schlüsselwort wiederzuverwenden. Sie werden andere Beispiele für die Wiederverwendung von Schlüsselwörtern bemerken, zum Beispiel:new
in allgemeinen Einschränkungenin
inforeach
und in variantenartigen Parameterndefault
als Klausel inswitch
und als Operator (default(T)
).quelle