Worin besteht der Unterschied zwischen Eigenschaften und Methoden in C#?
Methoden entsprechen dem, was man auch als Prozeduren bezeichnet.
Eigenschaften sehen für den Aufrufer wie gewöhnliche Variable aus, welche man lesen oder schreiben kann. In Wirklichkeit werden beim Aufruf aber Codesequenzen ausgeführt, welche zusätzliche Funktionen ausführen, z.B. Logging oder eine Bereichsprüfung.
Ein Beispiel für ein Array, auf dessen einzelne Einträge über Eigenschaften zugegriffen wird:
Die Aufrufe sehen recht einfach aus:
Service_ErrorSpeicher = new ErrorArray("MAS90_SV"); 
 if (Service_ErrorSpeicher[errpos] == Error) return; 
 Service_ErrorSpeicher[errpos] = Error; 
Bei der Ausführung des Zugriffs passiert hingegen eine Menge:
public byte this[ErrorPos position] 
{ 
    get 
    { 
        if (position == null) return 0; 
         Pred pred = new Pred(position); 
        ErrorEntry entry = list_of_errors.Find(pred.is_in); 
         if (entry == null) 
        { 
            return 0; 
        } 
        else 
        { 
            return entry.wert; 
        } 
    } 
    set 
    { 
        if (position == null) return; 
         Pred pred = new Pred(position); 
        ErrorEntry entry = list_of_errors.Find(pred.is_in); 
         if (entry == null) 
        { 
            if (value > 0) 
            { 
                schreibe_in_meldungslog(position, value, 0); 
                list_of_errors.Add(new ErrorEntry(position, value)); 
             } 
        } 
        else 
        { 
            if (value == 0) 
            { 
                list_of_errors.Remove(entry); 
            } 
            else 
            { 
                schreibe_in_meldungslog(position, value, entry.wert); 
                entry.wert = value; 
            } 
        } 
    } 
} 
Leider etwas umfangreich, aber ich wollte ein Beispiel aus der Praxis nehmen.
Der Clou: Der Index für den Zugriff ist in Wirklichkeit ein Objekt, welches mehrere Komponenten enthält. 2 Komponenten in diesem Objekt adressieren in Wirklichkeit ein 2-dimensionales Array, welches vorwiegend Nullen enthält. Und die Datenhaltung erfolgt in Wirklichkeit in einer Liste. Indexpositionen, welche nicht in dieser Liste vorkommen, enthalten per Definition den Wert Null. Dies spart sehr viel Speicherplatz.
Eigenschaften wären als Sprachmittel entbehrlich, man könnte diese Funktionalität auch mittels Methoden erreichen. Aber man hat die herkömmliche Schreibweise wie bei der Verwendung von Variablen, erreicht insgesamt eine kompaktere, lesbarere Darstellung und kann nachträglich bei Bedarf aus einer Variablen leicht eine Eigenschaft machen.
Ohne Eigenschaften könnte man folgendes nicht so kompakt schreiben:
SumMeld_ErrorSpeicher[Line_SumMeld_ErrPos] &= unchecked((byte)~0x01); 
Mit Hilfe von Eigenschaften können problemlos auch Nur-Lese- oder Nur-Schreib-Zugriffe realisiert werden.