2017-01-08 3 views
-2

Normalerweise wiederholt ein Konstruktor in C# viele Zuordnungen zu bereits vorhandenen Symbolen.C# Constructor Standardargumente

Als Beispiel:

class P{ 
    int x; 
    int y; 
    int z; 
    P(int x,int y,int z,...) 
    { 
     this.x=x; 
     this.y=y; 
     this.z=z; 
     /... 
    } 
} 

Gibt es eine Möglichkeit Konstruktor Eingaben Felder mit dem gleichen Namen auf dem Standard zuweisen. Es macht keinen Sinn, diese One-One-Map für jede Klasse neu zu implementieren.

+4

Mögliches Duplikat von [Verknüpfung zum Erstellen eines Konstruktors mit Variablen (C# VS2010)] (http://stackoverflow.com/questions/8893979/shortcut-for-creating-constructor-with-variables-c-vs2010) –

Antwort

0

Momentan ist es nicht möglich.

Aber es gibt eine Funktion in C# Backlog namens Records. Obwohl ich nicht sicher bin, ob wir es in C# 7 sehen werden. Record-Typen erlauben eine einzeilige Definition von Klassen mit einer Menge von Eigenschaften, die automatisch mit Konstruktorargumenten zugewiesen werden. Z.B.

public class Point(int X, int Y); 

die als

public class Point 
{ 
    public int X { get; } 
    public int Y { get; } 

    public Point(int x, int y) 
    { 
     X = x; 
     Y = y; 
    } 

    // plus Equals, GetHashCode, With 
} 
0

Nicht in der Art und Weise gleiche Sie denken (wenn ich Sie richtig verstanden habe). Die Namen der Parameter für den Konstruktor und die Namen der Felder/Eigenschaften sind wirklich nur bequeme Bezeichnungen für Menschen. Eine Klasse sollte unabhängig sein und ihren Zustand einkapseln. Selbst wenn man einer Compiler-Option erlaubt, externe (übergebene) Namen gleichzusetzen mit den internen, wird dieses Konzept verwechselt.

Sie können wie diese Dinge tun:

public class foo { 
    public int X { get; set; } 
    public string Y { get { return X.ToString(); } } 
    public double Z { get; private set; } 
    private foo(int x) { X = x; } 
    public foo(int x, string y, double z = 1.0): this(x) { 
     Z = z; 
     } 
    } 

ein öffentlicher Konstruktor einen privaten Konstruktor verwendet (oder einem anderen öffentlichen Konstruktor) einen Teil der Arbeit zu tun (wie die letzte foo Konstruktor tut). Und Sie verwenden optionale Parameter (wie das Sehen von z im letzten foo-Konstruktor zeigt).