Freigeben über


Grundlagen zu Klassen (C# und Java im Vergleich)

Aktualisiert: November 2007

In den folgenden Abschnitten werden C#-Modifizierer und Java-Modifizierer miteinander verglichen.

Zugriffsmodifizierer

C#-Modifizierer und Java-Modifizierer unterscheiden sich nur in einigen kleineren Punkten. Jeder Klassenmember oder auch die Klasse selbst kann mit einem Zugriffsmodifizierer deklariert werden, um den erlaubten Zugriffsbereich zu definieren. Für Klassen, die nicht innerhalb anderer Klassen deklariert sind, kann nur der public-Modifizierer oder der internal-Modifizierer angeben werden. Geschachtelte Klassen, z. B. andere Klassenmember, können einen der folgenden fünf Zugriffsmodifizierer angeben:

  • public

    Für alle sichtbar.

  • protected

    Nur für abgeleitete Klassen sichtbar.

  • private

    Nur innerhalb der jeweiligen Klasse sichtbar.

  • internal

    Nur innerhalb der gleichen Assembly sichtbar.

  • protected internal

    Nur für die aktuelle Assembly oder für Typen sichtbar, die von der enthaltenden Klasse abgeleitet sind.

Die Modifizierer public, protected und private

Der public-Modifizierer macht Member überall verfügbar, sowohl innerhalb als auch außerhalb von Klassen. Der protected-Modifizierer zeigt an, dass der Zugriff auf die Klasse selbst oder auf davon abgeleitete Klassen beschränkt ist. Der private-Modifizierer legt fest, dass der Zugriff nur aus dem Typ selbst heraus möglich ist. In C# ist private der Standardzugriffsmodifizierer, in Java ist der Zugriff standardmäßig aus dem entsprechenden Paket heraus uneingeschränkt.

Der internal-Modifizierer

Auf ein internal-Element darf nur innerhalb der aktuellen Assembly zugegriffen werden. Eine Assembly in .NET Framework entspricht in etwa einer JAR-Datei in Java. Sie enthält die Grundelemente zum Erstellen weiterer Programme.

Der protected internal-Modifizierer

Ein protected internal-Element ist nur für die aktuelle Assembly sichtbar oder für Typen, die sich von der Klasse selbst ableiten.

Der sealed-Modifizierer

Klassen, deren Klassendeklaration den sealed-Modifizierer enthält, sind sozusagen das Gegenteil von abstrakten Klassen, denn sie können nicht geerbt werden. Die Funktionalität einer als versiegelt markierten Klasse kann von anderen Klassen nicht überschrieben werden. Entsprechend kann eine versiegelte Klasse nicht abstrakt sein. Beachten Sie auch, dass struct implizit versiegelt wird und deshalb nicht geerbt werden kann. Der sealed-Modifizierer entspricht dem Markieren von Klassen mit dem final-Schlüsselwort in Java.

Der readonly-Modifizierer

Zum Definieren einer Konstante in C# verwenden Sie anstelle des final-Schlüsselworts aus Java den const-Modifizierer oder den readonly-Modifizierer. Der Unterschied zwischen den beiden Modifizierern in C# besteht darin, dass const-Elemente zur Kompilierzeit verarbeitet werden, während die Werte von readonly-Feldern zur Laufzeit angegeben werden. Dies bedeutet, dass die Zuweisung zu readonly-Feldern sowohl im Klassenkonstruktor als auch in der Deklaration erfolgen kann. Zum Beispiel deklariert die folgende Klasse eine readonly-Variable mit dem Namen IntegerVariable, die im Klassenkonstruktor initialisiert wird:

public class SampleClass
{
    private readonly int intConstant;

    public SampleClass ()  //constructor
    {
        // You are allowed to set the value of the readonly variable 
        // inside the constructor
        intConstant = 5;
    }


    public int IntegerConstant
    {
        set
        {
            // You are not allowed to set the value of the readonly variable 
            // anywhere else but inside the constructor

            // intConstant = value;  // compile-time error
        }
        get
        {
            return intConstant;
        }
    }
}
class TestSampleClass
{
    static void Main()
    {
        SampleClass obj= new SampleClass();

        // You cannot perform this operation on a readonly field.
        obj.IntegerConstant = 100;

        System.Console.WriteLine("intConstant is {0}", obj.IntegerConstant);  // 5
    }
}

Einen readonly-Modifizierer für ein statisches Feld initialisieren Sie am besten im statischen Konstruktor der Klasse.

Siehe auch

Konzepte

C#-Programmierhandbuch

Referenz

Zugriffsmodifizierer (C#-Programmierhandbuch)

Konstanten (C#-Programmierhandbuch)

Weitere Ressourcen

Die Programmiersprache C# für Java-Entwickler