2016-11-07 2 views
0

Ich habe die folgenden Klassen:C# konvertieren vorhandene Klasse Eigenschaften richtig verwenden

class Given 
{ 
    public string text = ""; 
    public List<StartCondition> start_conditions = new List<StartCondition>(); 
}; 

class StartCondition 
{ 
    public int index = 0; 
    public string device = "unknown"; 
    public string state = "disconnected"; 
    public bool isPass = false; 
}; 

Ich möchte, dass sie in C# Eigenschaften konvertieren (get verwenden, und setzen;)

auf diese Frage suchen: what-is-the-get-set-syntax-in-c es scheint kann ich eine Unterkunft schön und einfach wie diese machen:

class Given 
{ 
    public string text { get; set; } 
    public List<StartCondition> start_conditions { get; set; } 
}; 

class StartCondition 
{ 
    public int index { get; set; } 
    public string device { get; set; } 
    public string state { get; set; } 
    public bool isPass { get; set; } 
}; 

Aber jetzt weiß ich nicht, wie ich meine Initialisierungen hinzufügen sollte, weil ich die gleichen Startwerte wollen wie ich vorher hatte, oder für den Listencontainer möchte ich, dass er neu ist.

Was ist der beste Weg, dies zu erreichen?

+3

Sind Sie auf C# 6? Wenn ja, füge einfach '{get; einstellen; } = 0' usw. Ansonsten initialisiere einfach im Konstruktor. –

+1

Sie können den Klassen auch Konstruktoren hinzufügen und diese Parameter jedes Mal festlegen, wenn die Klasse instanziiert wird. –

+0

@KirkWoll Vielen Dank - scheint jetzt offensichtlich: o ... Ich habe C# 2015, nicht sicher, was C# 6 ist? –

Antwort

6

Die Möglichkeit, Auto-Eigenschaftsinitialisierer zu haben, ist seit C# 6.0 enthalten. Die Syntax ist:

public int X { get; set; } = x; // C# 6 or higher 
+0

Vielen Dank. Ist C# 2015> C# 6? ... ich nehme an, es ist –

+0

http://stackoverflow.com/a/19532977/3480836 –

4

Verwenden Sie einen Konstruktor. Ihre Klasse würde also so aussehen:

public class StartCondition 
{ 
    public int index { get; set; } 
    public string device { get; set; } 
    public string state { get; set; } 
    public bool isPass { get; set; } 

    // This is the constructor - notice the method name is the same as your class name 
    public StartCondition(){ 
     // initialize everything here 
     index = 0; 
     device = "unknown"; 
     state = "disconnected"; 
     isPass = false; 
    } 
} 
+0

Dies ist, was ich tun würde, wie ich in den Kommentaren der Frage sagte. =] –

+0

Das gleiche hier - und ja, ich tippte, als Sie einen Kommentar hinzufügten. Fühlen Sie sich frei, eine Antwort hinzuzufügen, wenn Sie bevorzugen ..... – Darren

+0

Nein, Sie haben mich dazu geschlagen! Ich habe deine Antwort aufgewertet, da ich denke, dass es die beste ist. –

0

ein Constructor Erstellen Sie Ihre Klasseninstanz mit den Standardwerten starten

class Given 
{ 
    public Given(){ 
     this.text = ""; 
     start_conditions = new List<StartCondition>(); 
    } 
    public string text { get; set; } 
    public List<StartCondition> start_conditions { get; set; } 
}; 

class StartCondition 
{ 
    public StartCondition(){ 
     this.index = 0; 
     this.device = "unknown"; 
     this.state = "disconnected"; 
     this.isPass = false; 
    } 
    public int index { get; set; } 
    public string device { get; set; } 
    public string state { get; set; } 
    public bool isPass { get; set; } 
}; 

Jetzt können Sie Ihre Instanzen mit den Standardwerten erstellen, indem StartCondition A = new StartCondition();

0

Verwendung Wenn Sie Wenn Sie C# 6+ nicht verwenden (oder auch nicht), können Sie Ihre Backing-Variablen explizit für Eigenschaften deklarieren:

public class Given 
{ 
    private string _text = string.Empty; 
    private List<StartCondition> _start_conditions = new List<StartCondition>(); 

    public string text { get{ return _text; } set{ _text = value; } } 
    public List<StartCondition> start_conditions { get{ return _start_conditions; } set{ _start_conditions = value; } } 
} 

Damit können Sie Ihre Initialisierungen wie zuvor einstellen.

Verwandte Themen