Objektorientiertes Programmieren
Markieren Sie das Kontrollkästchen Englisch, um die englische Version dieses Artikels anzuzeigen. Sie können den englischen Text auch in einem Popup-Fenster einblenden, indem Sie den Mauszeiger über den Text bewegen.
Übersetzung
Englisch

Objektorientierte Programmierung (C# und Visual Basic)

 

Veröffentlicht: Juli 2016

Alle verwalteten Sprachen im .NET Framework, z. B. Visual Basic und C#, bieten vollständige Unterstützung für objektorientierte Programmierung, einschließlich Kapselung, Vererbung und Polymorphie.

Kapselung bedeutet, dass eine Gruppe verwandter Eigenschaften, Methoden sowie anderer Member als eine Einheit bzw. ein Objekt behandelt werden.

Vererbung beschreibt die Fähigkeit, neue Klassen basierend auf einer vorhandenen Klasse zu erstellen.

Polymorphismus bedeutet, dass Sie mehrere Klassen untereinander austauschen können, obwohl jede Klasse dieselben Eigenschaften oder Methoden auf unterschiedliche Art und Weise implementiert.

In diesem Abschnitt werden die folgenden Konzepte beschrieben:

Die Begriffe Klasse und Objekt werden häufig verwechselt, tatsächlich beschreibt Klasse den Typ eines Objektes, während Objekte die benutzbaren Instanzen der Klassen sind. Daher wird das Erstellen eines Objekts als Instanziierung bezeichnet. Um auf den Vergleich mit Bauplänen zurückzukommen: Eine Klasse ist ein Bauplan, und ein Objekt ist ein anhand dieses Bauplans errichtetes Gebäude.

So definieren Sie eine Klasse

class SampleClass
{
}

Visual Basic und C# bieten auch eine einfachere Version von Klassen namens Strukturen, die nützlich sind, wenn Sie ein großes Array von Objekten erstellen müssen, und nicht zu viel Arbeitsspeicher dafür nutzen möchten.

So definieren Sie eine Struktur

struct SampleStruct
{
}

Weitere Informationen finden Sie in folgenden Themen:

Jede Klasse kann unterschiedliche Klassenmember haben, welche Eigenschaften enthalten die Klassendaten beschreiben, Methoden die das Verhalten einer Klasse definieren und Ereignisse, die die Kommunikation zwischen verschiedenen Klassen und Objekten ermöglichen.

Felder und Eigenschaften stellen Informationen dar, die ein Objekt enthält. Felder sind wie Variablen, sie können direkt gelesen oder festgelegt werden.

So definieren Sie ein Feld

Class SampleClass
{
    public string sampleField;
}

Eigenschaften verfügen über Get- und Set-Prozeduren, die eine bessere Kontrolle über das Festlegen oder Abrufen von Werten ermöglichen.

C# und Visual Basic erlauben Ihnen, entweder ein privates Feld für das Speichern des Eigenschaftswerts zu erstellen oder so genannte automatisch implementierte Eigenschaften zu benutzen, die dieses Feld automatisch im Hintergrund erstellen und die grundlegende Logik für die Property-Prozeduren zur Verfügung stellen.

So definieren Sie eine automatisch implementierte Eigenschaft

class SampleClass
{
    public int SampleProperty { get; set; }
}

Wenn Sie einige zusätzliche Vorgänge zum Lesen und Schreiben des Eigenschaftswerts ausführen müssen, definieren Sie ein Feld zum Speichern des Eigenschaftswerts und stellen Sie die grundlegende Logik für Speicherung und Abruf bereit:

class SampleClass
{
    private int _sample;
    public int Sample
    {
        // Return the value stored in a field.
        get { return _sample; }
        // Store the value in the field.
        set { _sample = value; }
    }
}

Die meisten Eigenschaften verfügen über Methoden oder Verfahren zum Festlegen und Abrufen des Eigenschaftenwerts. Allerdings können Sie schreibgeschützte oder lesegeschützte Eigenschaften erstellen, um zu verhindern, dass diese geändert oder gelesen werden können. In Visual Basic können Sie ReadOnly und WriteOnly Schlüsselwörter verwenden. In C# muss die get-Eigenschaftenmethode oder die set-Eigenschaftenmethode nicht angegeben werden. In Visual Basic und C# können automatisch implementierte Eigenschaften jedoch nicht schreibgeschützt oder lesegeschützt sein.

Weitere Informationen finden Sie unter:

Eine Methode ist eine Aktion, die von einem Objekt ausgeführt werden kann.

System_CAPS_noteHinweis

In Visual Basic gibt es zwei Möglichkeiten, eine Methode zu erstellen: die Sub-Anweisung wird verwendet, wenn die Methode keinen Wert zurückgibt; die Funktion-Anweisung wird verwendet, wenn eine Methode einen Wert zurückgibt.

So definieren Sie eine Methode einer Klasse:

class SampleClass
{
    public int sampleMethod(string sampleParam)
    {
        // Insert code here
    }
}

Eine Klasse kann mehrere Implementierungen oder Überladungen der gleichen Methode aufweisen, die sich durch die Anzahl der Parameter oder der Parametertypen unterscheidet.

Eine Methode überladen:

public int sampleMethod(string sampleParam) {};
public int sampleMethod(int sampleParam) {}

In den meisten Fällen deklarieren Sie eine Methode innerhalb einer Klassendefinition. Sowohl Visual Basic als auch C# unterstützen jedoch auch Erweiterungsmethoden, mit denen Sie einer vorhandenen Klasse außerhalb der eigentlichen Klassendefinition Methoden hinzuzufügen können.

Weitere Informationen finden Sie unter:

Konstruktoren sind Klassenmethoden, die automatisch ausgeführt werden, wenn ein Objekt eines bestimmten Typs erstellt wird. Konstruktoren initialisieren normalerweise die Datenmember des neuen Objekts. Konstruktoren können nur einmal während der Erstellung der Klasse ausgeführt werden. Weiterhin wird der Code im Konstruktor immer vor jedem anderen Code in einer Klasse ausgeführt. Sie können jedoch mehrere Konstruktorüberladungen auf die gleiche Weise wie für jede andere Methode erstellen.

So definieren Sie einen Konstruktor für eine Klasse:

public class SampleClass
{
    public SampleClass()
    {
        // Add code here
    }
}

Weitere Informationen finden Sie unter:

Destruktoren werden zur Zerstörung von Klasseninstanzen verwendet. In .NET Framework verwaltet die Garbage Collection die Speicherbelegung automatisch und gibt Arbeitsspeicher für die verwalteten Objekte in der Anwendung frei. Möglicherweise sind jedoch noch Destruktoren erforderlich, um alle nicht verwalteten Ressourcen zu bereinigen, die von der Anwendung erstellt werden. Es kann nur einen Destruktor für eine Klasse geben.

Weitere Informationen zu Destruktoren und der Garbage Collection in .NET Framework finden Sie unter Garbage Collection.

Ereignisse aktivieren eine Klasse oder ein Objekt, um Informationen über Aktionen von Interesse an andere Klassen oder Objekte zu übermitteln. Die Klasse, die das Ereignis sendet (oder auslöst), wird als Herausgeber bezeichnet, und die Klassen, die das Ereignis empfangen (oder behandeln), werden als Abonnenten bezeichnet. Weitere Informationen zu Ereignissen sowie zu ihrer Auslösung und Behandlung finden Sie unter Behandeln und Auslösen von Ereignissen.

Eine Klasse, die in einer anderen Klasse definiert wird, wird als geschachtelt bezeichnet. Standardmäßig ist die geschachtelte Klasse privat.

class Container
{
    class Nested
    {
        // Add code here.
    }
}

Um eine Instanz der geschachtelten Klasse zu erstellen, verwenden Sie den Namen der Containerklasse und geben einen Punkt sowie anschließend den Namen der geschachtelten Klasse ein:

Container.Nested nestedInstance = new Container.Nested()

Alle Klassen und Klassenmember können mit Zugriffsmodifizierern angeben, welche Zugriffsebene sie für andere Klassen bereitstellen.

Die folgenden Zugriffsmodifizierer sind verfügbar:

Visual Basic-Modifizierer

C#-Modifizierer

Definition

Public (Visual Basic)

public

Auf den Typ oder Member kann von jedem Code in der gleichen Assembly oder einer anderen Assembly, die darauf verweist, zugegriffen werden.

Private (Visual Basic)

private

Auf den Typ oder Member kann nur von Code in der gleichen Klasse zugegriffen werden.

Protected (Visual Basic)

protected

Auf den Typ oder Member kann nur von Code in der gleichen Klasse oder in einer abgeleiteten Klasse zugegriffen werden.

Friend (Visual Basic)

internal

Auf den Typ oder Member kann von jedem Code in der gleichen Assembly zugegriffen werden, jedoch nicht von Code in einer anderen Assembly.

Protected Friend

protected internal

Auf den Typ oder Member kann von jedem Code in der gleichen Assembly oder von jeder abgeleiteten Klasse in einer anderen Assembly zugegriffen werden.

Weitere Informationen finden Sie unter Access Levels in Visual Basic und Zugriffsmodifizierer (C#-Programmierhandbuch).

Um ein Objekt zu erstellen, müssen Sie eine Klasse instanziieren oder eine Klasseninstanz erstellen.

SampleClass sampleObject = new SampleClass();

Nachdem Sie eine Klasse instanziiert haben, können Sie den Eigenschaften und Feldern der Instanz Werte zuweisen und Klassenmethoden aufrufen.

// Set a property value.
sampleObject.sampleProperty = "Sample String";
// Call a method.
sampleObject.sampleMethod();

Verwenden Sie Objektinitialisierer, um Eigenschaften im Rahmen des Klasseninstanziierungsprozesses Werte zuzuweisen:

// Set a property value.
SampleClass sampleObject = new SampleClass 
    { FirstProperty = "A", SecondProperty = "B" };

Weitere Informationen finden Sie unter folgenden Themen:

Ein statischer (Visual Basic: freigegebener) Member der Klasse ist eine Eigenschaft, eine Prozedur oder ein Feld, die von allen Instanzen einer Klasse gemeinsam verwendet werden.

So definieren Sie einen statischen (freigegeben) Member:

static class SampleClass
{
    public static string SampleString = "Sample String";
}

Um auf den statischen (freigegeben) Member zuzugreifen, verwenden Sie den Namen der Klasse, ohne ein Objekt dieser Klasse zu erstellen:

Console.WriteLine(SampleClass.SampleString);

Statische (freigegebene) Klassen in C# verfügen ebenso wie Module in Visual Basic nur über statische (freigegebene) Member und können nicht instanziiert werden. Statische (freigegebene) Member können auch nicht auf nicht statische (nicht freigegebene) Eigenschaften, Felder oder Methoden zugreifen.

Weitere Informationen finden Sie unter:

Mit anonymen Typen können Objekte erstellt werden, ohne eine Klassendefinition für den Datentyp zu schreiben. Stattdessen erzeugt der Compiler eine Klasse. Die Klasse hat keinen verwendbaren Namen und enthält die von Ihnen in der Deklaration des Objekts angegebenen Eigenschaften.

So erstellen Sie eine Instanz eines anonymen Typs

// sampleObject is an instance of a simple anonymous type.
var sampleObject = 
    new { FirstProperty = "A", SecondProperty = "B" };

Weitere Informationen finden Sie unter:

Vererbung ermöglicht die Erstellung neuer Klassen, die in anderen Klassen definiertes Verhalten wieder verwenden, erweitern und ändern. Die Klasse, deren Member vererbt werden, wird Basisklasse genannt, und die Klasse, die diese Member erbt, wird abgeleitete Klasse genannt. Alle Klassen in C# sowie in Visual Basic erben jedoch implizit von der Object-Klasse, die die .NET-Klassenhierarchie unterstützt und einfache Dienste für alle Klassen bereitstellt.

System_CAPS_noteHinweis

Verwaltete Sprachen in .NET Framework unterstützen die Mehrfachvererbung nicht, d. h, Sie können für eine abgeleitete Klasse nur eine Basisklasse angeben.

So erben Sie von einer Basisklasse

class DerivedClass:BaseClass{}

Standardmäßig können alle Klassen geerbt werden. Sie können jedoch angeben, dass eine Klasse nicht als Basisklasse verwendet werden darf, oder eine Klasse erstellen, die nur als Basisklasse verwendet werden kann.

So geben Sie an, dass eine Klasse nicht als Basisklasse verwendet werden kann

public sealed class A { }

So geben Sie an, dass eine Klasse nur als Basisklasse verwendet und nicht instanziiert werden kann:

public abstract class B { }

Weitere Informationen finden Sie unter folgenden Themen:

Standardmäßig erbt eine abgeleitete Klasse alle Member von ihrer Basisklasse. Wenn Sie das Verhalten des geerbten Members ändern möchten, müssen Sie diesen überschreiben. Das heißt, Sie können eine neue Implementierung der Methode, der Eigenschaft oder des Ereignisses in der abgeleiteten Klasse definieren.

Mit folgenden Modifizierern steuern Sie das Überschreiben von Eigenschaften und Methoden:

Visual Basic-Modifizierer

C#-Modifizierer

Definition

Overridable (Visual Basic)

virtual (C#-Referenz)

Ermöglicht das Überschreiben eines Klassenmembers in einer abgeleiteten Klasse.

Overrides (Visual Basic)

override (C#-Referenz)

Überschreibt einen virtuellen (überschreibbaren) Member, der in der Basisklasse definiert wurde.

NotOverridable (Visual Basic)

Nicht unterstützt

Verhindert das Überschreiben eines Members in einer erbenden Klasse.

MustOverride (Visual Basic)

abstract (C#-Referenz)

Erfordert das Überschreiben eines Klassenmembers in der abgeleiteten Klasse.

Shadows (Visual Basic)

new-Modifizierer (C#-Referenz)

Blendet einen von einer Basisklasse geerbten Member aus.

Schnittstellen definieren (wie Klassen) einen Satz von Eigenschaften, Methoden und Ereignissen. Im Gegensatz zu Klassen jedoch bieten Schnittstellen keine Implementierung. Sie werden durch Klassen implementiert und als von Klassen unabhängige Entitäten definiert. Eine Schnittstelle stellt insofern einen Vertrag dar, dass eine Klasse, die eine Schnittstelle implementiert, jeden Aspekt dieser Schnittstelle gemäß seiner Definition implementieren muss.

So definieren Sie eine Schnittstelle

interface ISampleInterface
{
    void doSomething();
}

So implementieren Sie eine Schnittstelle in einer Klasse

class SampleClass : ISampleInterface
{
    void ISampleInterface.doSomething()
    {
        // Method implementation.
    }
}

Weitere Informationen finden Sie unter:

Klassen, Strukturen, Schnittstellen und Methoden in .NET Framework können Parameter eingeben, die Objekttypen definieren, die sie speichern oder verwenden können. Das einfachste Beispiel für Generika ist eine Auflistung, in der Sie den Typ von Objekten angeben können, die in einer Auflistung gespeichert werden sollen.

So definieren Sie eine generische Klasse

Public class SampleGeneric<T> 
{
    public T Field;
}

So erstellen Sie eine Instanz einer generischen Klasse

SampleGeneric<string> sampleObject = new SampleGeneric<string>();
sampleObject.Field = "Sample string";

Weitere Informationen finden Sie in folgenden Themen:

Ein Delegat ist ein Typ, der eine Methodensignatur definiert. Er kann einen Verweis auf jede Methode bereitstellen, die über eine kompatible Signatur verfügt. Sie können die Methode über den Delegaten aufrufen. Delegaten werden verwendet, um Methoden als Argumente an anderen Methoden zu übergeben.

System_CAPS_noteHinweis

Ereignishandler sind nichts weiter als Methoden, die durch Delegaten aufgerufen werden. Weitere Informationen zur Ereignisbehandlung mit Delegaten finden Sie unter Behandeln und Auslösen von Ereignissen.

So erstellen Sie einen Delegaten

public delegate void SampleDelegate(string str);

So erstellen Sie einen Verweis auf eine Methode, die der vom Delegaten angegebenen Signatur entspricht:

class SampleClass
{
    // Method that matches the SampleDelegate signature.
    public static void sampleMethod(string message)
    {
        // Add code here.
    }
    // Method that instantiates the delegate.
    void SampleDelegate()
    {
        SampleDelegate sd = sampleMethod;
        sd("Sample string");
    }
}

Weitere Informationen finden Sie unter folgenden Themen:

Anzeigen:
© 2016 Microsoft