Übersicht über Eigenschaften

Aktualisiert: November 2007

Durch eine Komponente sollten anstelle von öffentlichen Feldern Eigenschaften definiert werden, da visuelle Designer wie Visual Studio im Eigenschaftenbrowser Eigenschaften und keine Felder anzeigen. (Andere wichtige Gründe für das Definieren von Eigenschaften werden am Ende dieses Themas aufgelistet).

Eigenschaften sind mit intelligenten Feldern vergleichbar. Eine Eigenschaft verfügt i. A. über einen privaten Datenmember sowie Accessorfunktionen, und der Zugriff erfolgt syntaktisch wie bei einem Feld einer Klasse. (Eigenschaften verfügen zwar über unterschiedliche Zugriffsebenen, in diesem Abschnitt wird aber nur der häufigere Fall des öffentlichen Zugriffs erläutert.) Da Eigenschaften seit mehreren Versionen von Visual Basic verfügbar sind, können Visual Basic-Programmierer dieses Thema überspringen.

Eine Eigenschaftendefinition besteht i. A. aus den folgenden beiden Teilen:

  • Definition eines privaten Datenmembers.

    private int number = 0;
    
    Private number As Integer = 0
    
  • Definition einer öffentlichen Eigenschaft mit der Syntax für die Deklaration von Eigenschaften. Diese Syntax weist den privaten Datenmember über die get-Accessorfunktion und die set-Accessorfunktion einer öffentlichen Eigenschaft zu.

    public int MyNumber 
    {
    // Retrieves the number data member.
    get 
       { 
          return number; 
       }
    // Assigns to the number data member.
    set 
       { 
          number = value;
       }
    }
    
    Public Property MyNumber As Integer
       ' Retrieves number.
       Get 
          Return number
       End Get
       ' Assigns to number.
       Set 
          number = value
       End Set
    End Property
    

Der Begriff value ist ein Schlüsselwort in der Syntax für die Eigenschaftendefinition. Die Variable value wird der Eigenschaft im aufrufenden Code zugewiesen. Der Typ von value muss mit dem für die zugewiesene Eigenschaft deklarierten Typ identisch sein.

Während eine Eigenschaftendefinition i. A. einen privaten Datenmember enthält, ist dieses hier nicht erforderlich. Der get-Accessor kann einen Wert zurückgeben, ohne auf einen privaten Datenmember zuzugreifen. Ein Beispiel hierfür ist eine Eigenschaft, deren get-Methode die Systemzeit zurückgibt. Eigenschaften ermöglichten das Verbergen von Daten: Die Accessormethoden verbergen die Implementierung der Eigenschaft.

Zwischen den verschiedenen Programmiersprachen gibt es in Bezug auf die Eigenschaftensyntax einige Unterschiede. Der Begriff property stellt in C# im Unterschied zu Visual Basic beispielsweise kein Schlüsselwort dar. Programmiersprachenspezifische Informationen entnehmen Sie der Dokumentation für die entsprechende Sprache.

Im folgenden Beispiel wird eine Eigenschaft mit dem Namen MyNumber in der Klasse SimpleProperty definiert. Anschließend wird von der Klasse UsesSimpleProperty auf MyNumber zugegriffen.

public class SimpleProperty 
{
   private int number = 0;
   public int MyNumber 
   {
   // Retrieves the data member number.
   get 
      { 
         return number; 
      }
   // Assigns to the data member number.
   set 
      { 
         number = value;
      }
   } 
// Other members.
}
public class UsesSimpleProperty
{
   public static void Main()
   {
      SimpleProperty example = new SimpleProperty();
// Sets the property.
      example.MyNumber = 5;
// Gets the property.
      int anumber = example.MyNumber;
   }
}
Public Class SimpleProperty 
    Private number As Integer = 0

    Public Property MyNumber As Integer
        ' Retrieves number.
        Get 
            Return number
        End Get
        ' Assigns to number.
        Set 
            number = value
        End Set
    End Property    

' Other members...
End Class

Public Class UsesSimpleProperty
    Public Shared Sub Main()
        Dim example As New SimpleProperty()
        ' Sets the property.
        example.MyNumber = 5
        ' Gets the property.
        Dim anumber As Integer = example.MyNumber
    End Sub
End Class

Die get-Methode und die set-Methode unterscheiden sich normalerweise nicht von anderen Methoden. Sie können jede Programmlogik ausführen, Ausnahmen auslösen, überschrieben werden und mit allen in der Programmiersprache zulässigen Modifizierern deklariert werden. Beachten Sie jedoch, dass Eigenschaften auch statisch sein können. Wenn eine Eigenschaft statisch ist, sind die Anwendungsmöglichkeiten der Methoden get und set begrenzt. Einzelheiten finden Sie in der Referenzdokumentation zur jeweiligen Programmiersprache.

Der Typ einer Eigenschaft kann wie folgt dargestellt werden: durch einen primitiven Typ, eine Auflistung primitiver Typen, einen benutzerdefinierten Typ oder eine Auflistung benutzerdefinierter Typen. .NET Framework stellt für alle primitiven Typen Typkonverter bereit, die Umwandlungen von einer Zeichenfolge in einen Wert implementieren. Ausführliche Informationen finden Sie unter Verallgemeinerte Typkonvertierung. Wenn für eine Eigenschaft ein Typkonverter verfügbar ist, kann diese im Eigenschaftenbrowser im Designer angezeigt werden. Wenn Sie benutzerdefinierte Eigenschaften definieren und diese im Eigenschaftenbrowser anzeigen möchten, müssen Sie benutzerdefinierte Typkonverter implementieren.

Wenn der Datentyp einer Eigenschaft eine Enumeration ist, wird die Eigenschaft in einer Entwicklungsumgebung wie Microsoft Visual Studio im Eigenschaftenfenster als Dropdownliste angezeigt. Wenn der Datentyp einer Eigenschaft eine Klasse mit Eigenschaften ist, werden diese Eigenschaften als Untereigenschaften der definierenden Eigenschaft bezeichnet. Benutzer können in Visual Studio eine Eigenschaft im Eigenschaftenfenster erweitern, um deren Untereigenschaften anzuzeigen.

Eigenschaften müssen unbedingt Attribute hinzugefügt werden, damit diese zur Entwurfszeit im Eigenschaftenbrowser richtig angezeigt werden. Einzelheiten hierzu finden Sie unter Entwurfszeitattribute für Komponenten.

Statt öffentlicher Felder der Komponenten sollten Sie Eigenschaften verfügbar machen, da Eigenschaften das Verbergen von Daten ermöglichen und mit Versionsangaben versehen werden können. Außerdem können die Accessormethoden zusätzliche Logik ausführen. Im Allgemeinen erfordern Eigenschaften aufgrund von Just-In-Time-Optimierungen keinen größeren Aufwand als Felder.

Siehe auch

Konzepte

Entwurfszeitattribute für Komponenten