Objektorientierung: Objekteigenschaften

Objekteigenschaften (oder auch nur Eigenschaften) sind „bessere“ Variablen, hinter welchen ein Programmcode hinterlegt werden kann (also wie bei Funktionen). Eigenschaften sehen von der Deklaration ähnlich wie Variablen aus, bilden jedoch immer einen Block.
Bei einfachen Eigenschaften (ohne Werte-Prüfung oder anderen Programmcode) müssen innerhalb des Blocks die Schlüsselwörter get und set mit jeweils einem Semikolon am Ende notiert werden. Dadurch entspricht die Eigenschaft eigentlich einer Variablen. Trotzdem sollten Sie immer Eigenschaften anstatt Variablen verwenden, wenn der Wert von „außen“ (also von außerhalb der Klasse) zugänglich sein soll.
Die komplexeren Eigenschaften besitzen einen Programmcode, welche zur Überprüfung des Wertes genutzt werden kann. Natürlich könnten auch andere Aktionen ausgeführt werden, wie z. B. der Aufruf einer internen Funktion o. Ä.. Bei den komplexeren Eigenschaften bilden die get- und set-Schlüsselwörter eigene Blöcke. Innerhalb des get-Blocks muss ein Wert durch return zurückgegeben werden. Im set-Block dagegen kann der Wert z. B. in einer internen Variablen gespeichert werden. Um auf den „übergebenen“ oder zu setzenden Wert zuzugreifen, nutzen wir das Schlüsselwort value. Wie wir also sehen können, ist bei den komplexeren Eigenschaften immer eine interne Variable von Nöten, wenn der Wert intern gespeichert werden soll. Der Variablenname besteht dabei oft aus einem Unterstrich und dem Eigenschaftsnamen.
Stellen wir uns einmal vor, was wir mit solchen Eigenschaften alles machen können und wie wir diese adaptieren können. Es ist z. B. möglich, den set-Block wegzulassen: Dadurch können wir das Setzen eines Wertes unterbinden. Um das Setzen innerhalb der Klasse zuzulassen, jedoch von außen zu unterbinden, könnten wir auch vor das Schlüsselwort set einen Zugriffsmodifizierer platzieren (z. B. private oder protected).
In der objektorientierten Programmierung ist es übrigens üblich, dass die Eigenschaften nicht mit einem Suffix passend zum Daten-Typ versehen werden.

Program.cs

using System;

namespace CSV20.Objekteigenschaften
{
    class Program
    {
        static void Main(string[] args)
        {
            Computer oComputer = new Computer();

            oComputer.HdmiVorhanden = true;
            oComputer.FestplattenGröße = 8192;  // funktioniert nicht > vorherige Größe bleibt erhalten
            oComputer.ZeigeInfo();
            oComputer.FestplattenGröße = 512;
            oComputer.ZeigeInfo();
            oComputer.HdmiVorhanden = false;
            oComputer.ZeigeInfo();

            Console.ReadKey();
        }
    }
}

Computer.cs
using System;

namespace CSV20.Objekteigenschaften
{
    public class Computer
    {
        private int iFestplattenGröße = 256;        // interner Wert für die Festplattengröße

        public bool HdmiVorhanden { get; set; }
        public int FestplattenGröße
        {
            get
            {
                return iFestplattenGröße;
            }
            set
            {
                // nur Größen von 32 GB bis 4 TB erlaubt
                if (value >= 32 && value <= 4096)
                    iFestplattenGröße = value;
            }
        }

        public void ZeigeInfo()
        {
            Console.WriteLine("Computer-Info:");
            Console.WriteLine(" > Die Festplatte ist {0} GB groß", iFestplattenGröße);
            if (HdmiVorhanden)
                Console.WriteLine(" > HDMI-Anschluss ist vorhanden");
        }
    }
}
Download

LinksRechts