Galileo Computing <openbook>
Galileo Computing - Programming the Net
Galileo Computing - Programming the Net


C# von Eric Gunnerson
Die neue Sprache für Microsofts .NET-Plattform
C# - Zum Katalog
gp Kapitel 8 Zugriff auf Klassenmitglieder
  gp 8.1 Klassenzugriff
  gp 8.2 Verwenden von internal für Klassenmitglieder
  gp 8.3 internal protected
  gp 8.4 Die Beziehung zwischen Klassen- und Mitgliedszugriff

Kapitel 8 Zugriff auf Klassenmitglieder

Eine der wichtigen Entscheidungen beim Objektentwurf ist die, in welchem Maße die Mitglieder einer Klasse auf das Objekt zugreifen können. In C# kann der Zugriff auf verschiedene Arten gesteuert werden.


Galileo Computing

8.1 Klassenzugriff  downtop

Die Zugriffssteuerung auf Klassenebene stellt die gröbste Art der Steuerung dar. In den meisten Fällen sind die einzigen zulässigen Modifikatoren für eine Klasse public (die Klasse ist für jedermann sichtbar) und internal. Eine Ausnahme stellt hierbei die Verschachtelung von Klassen in anderen Klassen dar. Dieses Thema ist etwas komplexer und wird in Kapitel 8, Mehr zu Klassen, behandelt.

Anhand von internal kann einem umfangreicheren Satz Klassen Zugriff gewährt werden, ohne dass jeder Benutzer Zugriff auf die Klasse erhält. Dieses Schlüsselwort wird häufig beim Schreiben von Helferklassen eingesetzt, die vor dem Benutzer der Klasse verborgen werden sollen. In der .NET-Laufzeitumgebung wird mit internal Zugriff auf alle Klassen gewährt, die sich in der gleichen Assemblierung wie diese Klasse befinden.


Im Allgemeinen sollten Klassen als internal deklariert werden, es sei denn, der Benutzer soll Zugriff auf die Klasse erhalten.


Galileo Computing

8.2 Verwenden von internal für Klassenmitglieder  downtop

Der Modifikator internal kann auch für ein Klassenmitglied verwendet werden. Hierbei kann von Klassen derselben Assemblierung aus auf das Mitglied zugegriffen werden, nicht jedoch von Klassen außerhalb der Assemblierung aus.

Dies ist besonders nützlich, wenn verschiedene öffentliche Klassen zusammenarbeiten müssen, einige der gemeinsam verwendeten Mitglieder jedoch nicht für die Allgemeinheit offen gelegt werden sollen. Sehen Sie sich folgendes Beispiel an:

public class DrawingObjectGroup
{
    public DrawingObjectGroup()
    {
        objects = new DrawingObject[10];
        objectCount = 0;
    }
    public void AddObject(DrawingObject obj)
    {
        if (objectCount < 10)
        {
            objects[objectCount] = obj;
            objectCount++;
        }
    }
    public void Render()
    {
        for (int i = 0; i < objectCount; i++)
        {
            objects[i].Render();
        }
    }

    DrawingObject[]    objects;
    int            objectCount;
}
public class DrawingObject
{
    internal void Render() {}
}
class Test
{
    public static void Main()
    {
        DrawingObjectGroup group = new DrawingObjectGroup();
        group.AddObject(new DrawingObject());
    }
}

Hier enthält das Objekt DrawingObjectGroup bis zu 10 Zeichenobjekte. Der Benutzer soll einen Verweis auf ein DrawingObject verwenden dürfen, es ist jedoch nicht zulässig, für dieses Objekt Render() aufzurufen. Aus diesem Grund wird die Funktion Render() als intern gekennzeichnet.



Galileo Computing

8.3 internal protected  downtop

Eine erhöhte Flexibilität bei der Klassendefinition wird durch den Modifikator internal protected erreicht. Durch internal protected wird gekennzeichnet, dass ein Mitglied von einer Klasse aus zugänglich ist, die entweder über internal oder anhand von protected Zugriff erhalten könnte. Mit anderen Worten, internal protected bietet Zugriff über internal oder protected.


Galileo Computing

8.4 Die Beziehung zwischen Klassen- und Mitgliedszugriff  toptop

Zugriffsmodifikatoren müssen für Klassen und Mitglieder gleichermaßen vorhanden sein, damit auf ein Mitglied zugegriffen werden kann. Der Zugriff auf Mitglieder wird durch die Klasse beschränkt, damit der Zugriffsumfang für die Klasse nicht überschritten wird.

Sehen Sie sich folgendes Beispiel an:

internal class MyHelperClass
{
    public void PublicFunction() {}
    internal void InternalFunction() {}
    protected void ProtectedFunction() {}
}

Wenn diese Klasse als public deklariert würde, entsprächen die Zugriffsmöglichkeiten für Mitglieder denen des festgelegten Zugriffs, d. h. PublicFunction() wäre öffentlich, InternalFunction() wäre intern, ProtectedFunction() wäre geschützt.

Da die Klasse jedoch als intern deklariert ist, wird der Zugriff public für die Funktion PublicFunction() auf internal beschränkt.

   

Select * from SQL Server 2000




Copyright © Galileo Press GmbH 2001 - 2002
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


[Galileo Computing]

Galileo Press GmbH, Gartenstraße 24, 53229 Bonn, fon: 0228.42150.0, fax 0228.42150.77, info@galileo-press.de