Zum Inhalt springen

Anonymer Datentyp

aus Wikipedia, der freien Enzyklopädie
Dies ist die aktuelle Version dieser Seite, zuletzt bearbeitet am 12. Dezember 2025 um 22:42 Uhr durch imported>Timk70 (QS-, Überarbeiten-Baustein).
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)

Vorlage:Hinweisbaustein Ein anonymer Typ ist ein namenloser Datentyp, der nur im aktuellen Gültigkeitsbereich bekannt und verweisbar ist.

Die XML-Strukturdefinitionssprache XML Schema sieht vor, dass man in einem benannten Element einen unbenannten (anonymen) komplexen Typinhalt definieren kann.

In den Programmiersprachen C# und Visual Basic .NET stellen die Compiler seit .NET Framework 3 eine Möglichkeit bereit, im aktuellen Gültigkeitsbereich ein anonymes Objekt mit benannten Eigenschaften zu erstellen.

Anonyme Typen in XML Schema

In der Strukturdefinitionssprache XML Schema kann ein anonymer Typ als Teil der Definition eines XML-Elements definiert werden.<ref>XML Schema Part 0: Primer Second Edition: 2.4 Anonymous Type Definitions. Abgerufen am 29. November 2009.</ref> Häufig wird dies bei Definitionen von Listen verwendet, wie im folgenden Beispiel. <syntaxhighlight lang="xml">

 <xsd:element name="rechnung">
   <xsd:complexType>
     <xsd:sequence>
       <xsd:element name="posten" maxOccurs="unbounded">
         <xsd:complexType>
           <xsd:sequence>
             <xsd:element name="artikelnummer" type="xsd:string" />
             <xsd:element name="anzahl" type="xsd:integer" />
           </xsd:sequence>
         </xsd:complexType>
       </xsd:element>
     </xsd:sequence>
   </xsd:complexType>
 </xsd:element>

</syntaxhighlight> Hier gibt es zwar Elementnamen für einzelnen Rechnungsposten, die Liste selbst taucht jedoch nicht als Element auf, wie im folgenden Beispiel, das ein XML-Dokument darstellt, welches dem zuvor definierten Schema entspricht. <syntaxhighlight lang="xml">

 <rechnung>
   <posten>
     <artikelnummer>23</artikelnummer>
     <anzahl>3</anzahl>
   </posten>
   <posten>
     <artikelnummer>42</artikelnummer>
     <anzahl>5</anzahl>
   </posten>
 </rechnung>

</syntaxhighlight>

Anonyme Typen in C# 3 und Visual Basic 9

Mit anonymen Typen stellen die Sprachcompiler die Möglichkeit bereit, ein einfaches Objekt mit Eigenschaften zu erstellen, ohne es in einer separaten Datei als Klasse definieren zu müssen. Dazu wird die Variable mit 'var' deklariert.

Beispiel in C#: <syntaxhighlight lang="csharp"> var Person = new { Vorname = "Hans", Name = "Graf", Schuhgröße = 40 }; </syntaxhighlight>

Mit den anonymen Typen kann man auch vordefinierte Klassen instanzieren. Die Eigenschaften des anonymen Objekts werden den öffentlichen Eigenschaften der neu instanzierten Klasse zugewiesen. Angenommen es existiert die Klasse Person mit den öffentlichen Eigenschaften Vorname, Name und Schuhgröße: <syntaxhighlight lang="csharp"> Person meinePerson = new Person() { Vorname = "Hans", Name = "Graf", Schuhgröße = 40 }; </syntaxhighlight>

Es ist auch möglich, Arrays mit der anonymen Typ-Syntax zu initialisieren: <syntaxhighlight lang="csharp"> Person[] meinePersonen = new Person[] {

 new Person { Vorname = "Hans", Name = "Graf", Schuhgröße = 40 },
 new Person { Vorname = "Anne", Name = "Schneider", Schuhgröße = 38 }

}; </syntaxhighlight> Bei der Initialisierung von Dictionary<T> wird die Syntax mit anonymen Typen ebenfalls vereinfacht: <syntaxhighlight lang="csharp"> Dictionary<string, Person> IdPersonen = new Dictionary<string, Person>() {

 { "id_0", new Person { Vorname = "Hans", Name = "Graf" },
 { "id_1", new Person { Vorname = "Anne", Name = "Schneider" }

}; </syntaxhighlight>

Tatsächlich sollte die Anwendung dieser Methode nicht übertrieben werden, da bei jeder Definition ein neuer Typ generiert (TypeBuilder) und instanziert wird.

Anonyme (generierte) Typen in .NET Framework sind direkt vererbt von System.Object, können nicht geerbt werden und die Eigenschaften werden ausschließlich mit get_-Accessor generiert, d. h. man kann nicht vor einer Schleife den Typ definieren und innerhalb der Schleife die Eigenschaften-Werte ändern.

Möchte man eine Funktion definieren, die einen anonymen Typ als Parameter annimmt, muss man den Funktionsparameter als System.Object definieren und seine Eigenschaften mittels Reflexion auslesen.

Weblinks

Einzelnachweise

<references />