2009-02-03 6 views
5

Vor ein paar Monaten las ich über eine Technik, so dass, wenn dort Parameter übergeben Sie die lokalen Variablen übereinstimmen, dann könnten Sie eine kurze Hand Syntax verwenden, um sie festzulegen. Um dies zu vermeiden:C# -Objekt Konstruktor - Kurzschrift Eigenschaft Syntax

public string Method(p1, p2, p3) 
{ 
    this.p1 = p1; 
    this.p2 = p2; 
    this.p3 = p3; 
} 

Irgendwelche Ideen?

Antwort

25

Sie können über die neue Objektinitialisierersyntax in C# 3.0 nachdenken. Es sieht wie folgt aus:

var foo = new Foo { Bar = 1, Fizz = "hello" }; 

uns So eine neue Instanz von Foo das ist zu geben, mit der „Bar“ Eigenschaft auf 1 initialisiert und der „Fizz“ Eigenschaft auf „Hallo“.

Der Trick mit dieser Syntax ist, dass wenn Sie das "=" weglassen und eine Kennung angeben, wird davon ausgegangen, dass Sie eine Eigenschaft mit demselben Namen zuweisen. So zum Beispiel, wenn ich bereits eine Foo Instanz hatte, konnte ich dies tun:

var foo2 = new Foo { foo1.Bar, foo1.Fizz }; 

dieses, dann wird immer ziemlich nah an Ihrem Beispiel. Wenn Ihre Klasse P1, P2 und P3 Eigenschaften hat, und Sie haben Variablen mit dem gleichen Namen, könnten Sie schreiben:

var foo = new Foo { p1, p2, p3 }; 

Beachten Sie, dass diese Instanzen ist nur für die Konstruktion - nicht für die Parameter in Methoden wie Ihr Beispiel zeigt vorbei - Vielleicht ist es nicht das, woran du denkst.

+0

Sie könnten Matt sein, obwohl ich nicht sicher bin. Haha. wirklich müssen diese Dinge speichern, wenn ich sie beim nächsten Mal finde. Prost. – Schotime

2

Sie denken möglicherweise an den "Objektinitialisierer" in C#, wo Sie ein Objekt erstellen können, indem Sie die Eigenschaften der Klasse festlegen, anstatt einen parametrisierten Konstruktor zu verwenden.

Ich bin nicht sicher, dass es in dem Beispiel verwendet werden kann, das Sie haben, da Ihr "dieses" bereits konstruiert worden ist.

+0

Gibt es in Java etwas Ähnliches? – Verhogen

+1

Nicht so weit ich weiß. –