2017-02-28 7 views
2

Mein Dozent sagte uns, dass wir private Felder und öffentliche Objekte verwenden sollten. Kürzlich habe ich ein Tutorial Video gesehen. Der Präsentator hat nur Eigenschaften erstellt. Ist es in Ordnung, nur die Eigenschaft zu verwenden?Ist es in Ordnung, private Felder zu überspringen und nur Eigenschaften in C# zu verwenden?

+0

Seine absolut in Ordnung neu gestaltet werden, um Eigenschaften zu verwenden, ohne private Felder. Sie werden als automatische Eigenschaften bezeichnet. Private Felder sind besonders nützlich, wenn Sie eine zusätzliche Logik in Getter und Setter vor oder nach dem Festlegen des Werts für das private Feld und vor dem Zurückgeben des Werts für das private Feld ausführen möchten. –

+0

Related: http://StackOverflow.com/Q/1277572/380384 – ja72

+1

Darüber hinaus ist es schön, in der Lage zu sein, so etwas mit einer Eigenschaft zu tun: 'public int MyValue {get; privates Set; } '.. jetzt' MyValue' ist eine öffentliche Eigenschaft, die nur 'set'-fähig ist innerhalb der Klasse. – txtechhelp

Antwort

5

öffentliche Eigenschaften wie

public string Name { get; set; } 

automatisch private Träger Felder vom Compiler implementieren. Sie sehen sie nie, aber der Effekt ist der selbe wie manuell spezifizierte Unterstützungsfelder.

private string name; 
public string Name { get { return name; } set { name =value; } } 
+1

Also die Antwort ist ** ja mit C# 3.0 und später ** –

+0

'C# 3.0' und Visual Studio 2008 ist veraltet und so habe ich nicht die Mühe zu klären. Ich frage mich, ob es Klassen gibt, die immer noch zu .NET 3.5 bleiben nur – ja72

-1

Ja, es ist in Ordnung, öffentliche Eigenschaften ohne private Felder zu verwenden, obwohl die Verwendung öffentlicher Felder nicht in Ordnung ist. Der Grund dafür ist, dass Sie mit Eigenschaften die Art ändern können, wie Sie das Feld später intern validieren und speichern, während das Ändern nur von öffentlichen Feldern jeden Benutzer Ihrer Klasse durchbrechen würde. Der Hauptunterschied besteht darin, dass Sie bei Eigenschaften immer noch den internen Status der Klasse steuern können, selbst wenn dies mit automatisch generierten Feldern geschieht, während dies bei öffentlichen Feldern nicht der Fall ist.

3

Für .Net framework 2.0 und weniger, private Felder sind notwendig, sonst werden Sie Fehler erhalten kompilieren. In den höheren Versionen von .Net Framework funktioniert es ohne Fehler.

private Felder verwenden hat viele Vorteile

  1. die Eingänge Validieren, bevor sie an die Eigenschaften

    public int Max 
    { 
        get { return m_Max; } 
        set 
        { 
         if (value>0 && value<100) 
         { 
          m_Max=value; 
         } 
        } 
    } 
    
  2. Auslösen von Ausnahmen für falsche Werte

Von https://msdn.microsoft.com/en-us/library/ms229006.aspx Zuordnung

  1. den vorherigen Wert beibehalten, wenn ein Eigenschaften-Setter eine Ausnahme auslöst.

  2. Vermeiden Sie das Auslösen von Ausnahmen von Eigenschaftengettern. Wenn ein Getter eine Ausnahme auslösen kann, sollte es wahrscheinlich eine Methode, um

public int Max 
    { 
     get { return m_Max; } 
     set { 
      if(value > 0 && value < 100){ \\Value is within valid range 
       m_Max = value; 
      } 
      else if(value < 0) 
       //throw some exception to indicate value is not valid 
      else if(value > 100) 
       //throw some exception to indicate value is not valid 
     } 
    } 
+1

Ich bin nicht in der Lage, meinen Code zu formatieren – Kira

+0

Es ist eine schlechte Praxis für eine Eigenschaft Ausnahmen zu werfen (es sei denn, es ist ein Indexer).Weitere Informationen finden Sie unter [diese Frage zu Eigenschaften und Ausnahmen] (http://stackoverflow.com/questions/1488472/best-practices-throwing-exceptions-from-properties). Kurz gesagt: Wenn Ihre Immobilie werfen kann, dann sollte es wahrscheinlich eine Methode sein. In Ihrem zweiten Beispiel würde ich den Max-Getter beibehalten, aber den Setter durch eine SetMax-Methode ersetzen. – AnorZaken

+0

Für Setter zeigen sie an, dass Ausnahmen eine angemessene und akzeptable Fehlerbehandlungsstrategie darstellen. – Kira

Verwandte Themen