Wenn Sie in Visual Basic mehrere Eigenschaften eines einzelnen Objekts ändern, gibt es eine With/End With
-Anweisung:
Ich weiß, dass C # es beim Erstellen eines neuen Objekts tun kann:
%Vor% Aber wie mache ich das, wenn myOject
bereits erstellt wurde (wie das, was Visual Basic macht)?
Dies ist in C # nicht möglich.
Diese Funktion ist spezifisch für VB und das, was Ihnen am nächsten kommt. C # ist der Objektinitialisierer, wie Sie ihn beschreiben.
Wenn Sie versuchen, viel zu vermeiden, können Sie Ihrem Objekt einen kürzeren Namen geben:
%Vor%Warum hat C # nicht den Operator 'with' von VB.NET?
Viele Menschen, einschließlich der C # -Sprachdesigner, glauben, dass 'mit' oft die Lesbarkeit beeinträchtigt und eher ein Fluch als ein Segen ist. Es ist übersichtlicher, eine lokale Variable mit einem aussagekräftigen Namen zu deklarieren und mit dieser Variablen mehrere Operationen für ein einzelnes Objekt auszuführen, als einen Block mit einer Art implizitem Kontext zu haben.
VB.NET enthält einige Konstruktionsfehler von VB6 aus Gründen der Abwärtskompatibilität. Während Javascript den gleichen Designfehler aufweist (in der Tat ein noch schlimmerer, da sein with
zu mehrdeutigen Konstrukten führt), tun dies die meisten anderen C-Syntaxsprachen nicht, daher gibt es keinen Rückwärtskompatibilitätsvorteil beim Hinzufügen zu C # / p>
Wenn der Ausdruck "with" ein Klassentyp ist, entspricht die Anweisung "With" dem Erstellen einer neuen temporären Variablen dieses Typs, initialisiert auf den Ausdruck "With" und vor jedem führenden "." mit dieser Variable. Wenn es sich um einen Strukturtyp handelt, sind die Dinge jedoch komplizierter. Betrachten Sie den Code (offensichtlich nicht die Art und Weise, wie man normalerweise etwas schreiben würde, aber geschrieben, wie es ist, um einen Punkt zu verdeutlichen:
%Vor%Die Anweisung "With" speichert einen Verweis auf MyPoints (N). Selbst wenn MyPoints in ein anderes Array geändert wird oder N geändert wird, verweist die gespeicherte Referenz immer noch auf dasselbe Element des gleichen Arrays wie bei der Ausführung der With-Anweisung. Wenn man eine lokale Variable P vom Typ Point deklarierte und MyPoints (N) packte und dann in P.X und P.Y schrieb, würden die Schreibvorgänge nur die lokale Kopie P treffen, anstatt das Array zu aktualisieren. Um eine ähnliche Semantik in C # zu erreichen, müsste man entweder lokale Variablen sowohl für MyPoints als auch für N verwenden oder den Inhalt der With-Anweisung in eine anonyme Funktion mit einem ref-Parameter vom Typ Point einfügen. Um zu vermeiden, dass eine Closure zur Laufzeit erstellt werden muss, sollte die anonyme Funktion auch alle lokalen Variablen akzeptieren, die möglicherweise vom äußeren Bereich benötigt werden.
Antwort von @Mark Byers ist gut, aber die Variable x
wird nach der Festlegung der Eigenschaften weiter verwendet. Und Sie können den Namen x
nicht erneut verwenden (im selben Block).
Probieren Sie dies aus ( Und das Objekt muss Referenztyp in diesem Beispiel sein ):
%Vor%Tags und Links c# vb.net language-design with-statement