fields und properties

Attribut als field und Attribut als property

public class Foo 
{ 
  // attribute - field
  public int Baz;
  // attribute - property
  public int Bar { get; set; } 
}

Vor Einführung automatisch implementierter Eigenschaften in C# 3.0 wurde oft gefragt, ob anstatt einer Eigenschaft mit Standardimplementierung nicht das zugrundeliegende Feld öffentlich verwendbar sei da von außen sowieso kein Unterschied feststellbar ist.

Das stimmt zwar, aber es gibt trotzdem gute Gründe, dies nicht zu tun:

  • Der erzeugte MSIL-Code für den Zugriff auf ein Feld und der für den Zugriff auf eine Eigenschaft sind nicht kompatibel.
  • Eigenschaften lassen sich nicht als Referenzparameter übergeben.
  • Der Zugriff per Reflection funktioniert unterschiedlich für Eigenschaften und Felder.
  • Eigenschaften lassen sich leichter debuggen als Felder.
  • Eigenschaften sind für Datenbindung verwendbar — Felder nicht.