Zum Inhalt springen

Anonymer Datentyp

aus Wikipedia, der freien Enzyklopädie

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>{{#if:|{{#iferror: {{#iferror:{{#invoke:Vorlage:FormatDate|Execute}}|}}| |}}}}{{#if:|{{{autor}}}: }}{{#if:|{{#if:XML Schema Part 0: Primer Second Edition: 2.4 Anonymous Type Definitions|[{{#invoke:Vorlage:Internetquelle|archivURL|1={{#invoke:URLutil|getNormalized|1={{{archiv-url}}}}}}} {{#invoke:Vorlage:Internetquelle|TitelFormat|titel=XML Schema Part 0: Primer Second Edition: 2.4 Anonymous Type Definitions}}]{{#if:| ({{{format}}})}}{{#if:| {{{titelerg}}}{{#invoke:Vorlage:Internetquelle|Endpunkt|titel={{{titelerg}}}}}}}}}|{{#if:https://www.w3.org/TR/xmlschema-0/#InlineTypDefn%7C{{#if:{{#invoke:TemplUtl%7Cfaculty%7C}}%7C{{#invoke:Vorlage:Internetquelle%7CTitelFormat%7Ctitel={{#invoke:WLink%7CgetEscapedTitle%7C1=XML Schema Part 0: Primer Second Edition: 2.4 Anonymous Type Definitions}}}}|[{{#invoke:URLutil|getNormalized|1=https://www.w3.org/TR/xmlschema-0/#InlineTypDefn}} {{#invoke:Vorlage:Internetquelle|TitelFormat|titel={{#invoke:WLink|getEscapedTitle|1=XML Schema Part 0: Primer Second Edition: 2.4 Anonymous Type Definitions}}}}]}}{{#if:| ({{{format}}}{{#if:{{#if: 29. November 2009 | {{#if:{{#invoke:TemplUtl|faculty|}}||1}}}}

          | )
          | {{#if:{{#ifeq:de|de||{{#if:|1}}}}| ; 
              | )}}}}}}{{#if:| {{{titelerg}}}{{#invoke:Vorlage:Internetquelle|Endpunkt|titel={{{titelerg}}}}}}}}}}}{{#if:https://www.w3.org/TR/xmlschema-0/#InlineTypDefn%7C{{#if:{{#invoke:URLutil%7CisResourceURL%7C1=https://www.w3.org/TR/xmlschema-0/#InlineTypDefn}}%7C%7C}}}}{{#if:XML Schema Part 0: Primer Second Edition: 2.4 Anonymous Type Definitions|{{#if:{{#invoke:WLink|isValidLinktext|1=XML Schema Part 0: Primer Second Edition: 2.4 Anonymous Type Definitions|lines=0}}||}}}}{{#if: | In: {{#invoke:Vorlage:Internetquelle|TitelFormat|titel={{{werk}}}}}}}{{#if: | {{{hrsg}}}{{#if: |,|{{#if: 29. November 2009 | {{#if:{{#invoke:TemplUtl|faculty|}}|;|,}}}}}}}}{{#if: | {{#if:{{#invoke:DateTime|format|{{{datum}}}|noerror=1}}
            |{{#invoke:DateTime|format|{{{datum}}}|T._Monat JJJJ}}
            |{{#invoke:TemplUtl|failure|1=Fehler bei Vorlage:Internetquelle, datum={{{datum}}}|class=Zitationswartung}} }}{{#if: |,|{{#if: 29. November 2009 | {{#if:{{#invoke:TemplUtl|faculty|}}|;|,}}}}}}}}{{#if: | S. {{{seiten}}}{{#if: |,|{{#if: 29. November 2009 | {{#if:{{#invoke:TemplUtl|faculty|}}|;|,}}}}}}}}{{#if: {{#invoke:TemplUtl|faculty|}}| {{#if:|{{#if:|archiviert|ehemals}}|{{#if:|Archiviert|Ehemals}}}} {{#if:|vom|im}} Vorlage:Referrer{{#if:{{#invoke:TemplUtl|faculty|}}| (nicht mehr online verfügbar)}}{{#if: | am {{#iferror: {{#iferror:{{#invoke:Vorlage:FormatDate|Execute}}|}}|{{{archiv-datum}}}{{#if:1820076||(?)}}}}}}{{#if: 29. November 2009|;}}}}{{#if: 29. November 2009| {{#if:{{#invoke:TemplUtl|faculty|}}|abgerufen|Abgerufen}} {{#switch: {{#invoke:Str|len| {{#invoke:DateTime|format| 29. November 2009 |ISO|noerror=1}} }}
       |4=im Jahr
       |7=im
       |10=am
       |#default={{#invoke:TemplUtl|failure|1=Fehler bei Vorlage:Internetquelle, abruf=29. November 2009|class=Zitationswartung}} }} {{#invoke:DateTime|format|29. November 2009|T._Monat JJJJ}}
    | {{#invoke:TemplUtl|failure|1=Vorlage:Internetquelle | abruf=2026-MM-TT ist Pflichtparameter}} }}{{#if:{{#ifeq:de|de||{{#if:|1}}}}|{{#if:{{#if: 29. November 2009 | {{#if:{{#invoke:TemplUtl|faculty|}}||1}}}}
       |  (
       | {{#if: | |  (}}
       }}{{#ifeq:{{#if:de|de|de}}|de||
          {{#invoke:Multilingual|format|{{{sprache}}}|slang=!|split=[%s,]+|shift=m|separator=, }}}}{{#if: |{{#ifeq:{{#if:de|de|de}}|de||, }}{{{kommentar}}}}})}}{{#if: {{#if: 29. November 2009 | {{#if:{{#invoke:TemplUtl|faculty|}}||1}} }}|{{#if: |: {{
 #if: 
 | {{
     #ifeq: {{#if:{{#if: {{#invoke:templutl|faculty|}}|de-ch|de}}|{{#if: {{#invoke:templutl|faculty|}}|de-ch|de}}|de}} | de
     | Vorlage:Str trim
     | {{#invoke:Vorlage:lang|flat}}
     }}
 | {{#ifeq: {{#if:{{#if: {{#invoke:templutl|faculty|}}|de-ch|de}}|{{#if: {{#invoke:templutl|faculty|}}|de-ch|de}}|de}} | de
     | „Vorlage:Str trim“
     | {{#invoke:Text|quote
         |1={{#if: 
              | {{#invoke:Vorlage:lang|flat}}
              | {{#invoke:Vorlage:lang|flat}} }}
         |2={{#if: {{#invoke:TemplUtl|faculty|}}|de-CH|de}}
         |3=1}} }}

}}{{#if:

   |  (<templatestyles src="Person/styles.css" />{{#if:  | :  }}{{#if:  | , deutsch: „“ }})
   | {{#if: 
       |  ({{#if:  | , deutsch: „“ }})
       | {{#if:  |  (deutsch: „“) }}
 }}

}}{{#if: {{{zitat}}}

   | {{#if: 
       | {{#if: {{{zitat}}}
           | Vorlage:": Text= und 1= gleichzeitig, bzw. Pipe zu viel }} }}
   | Vorlage:": Text= fehlt }}{{#if:  | {{#if: {{#invoke:Text|unstrip|{{{ref}}}}}
             | Vorlage:": Ungültiger Wert: ref=
             | {{{ref}}} }}

}}|.{{#if:{{#invoke:TemplUtl|faculty|}}|{{#if:||{{#ifeq: | JaKeinHinweis |{{#switch:

   |0|=Vorlage:Toter Link/Core{{#if: https://www.w3.org/TR/xmlschema-0/#InlineTypDefn
       | {{#if:  | [1] }} (Seite {{#switch:|no|0|=|dauerhaft }}nicht mehr abrufbar{{#if:  | , festgestellt im {{#invoke:DateTime|format||F Y}} }}. Suche im Internet Archive ){{#if: 
           | {{#if: deadurlausgeblendet | | Vorlage:Toter Link/archivebot }}
         }}
       |   (Seite {{#switch:|no|0|=|#default=dauerhaft }}nicht mehr abrufbar{{#if:  | , festgestellt im {{#invoke:DateTime|format||F Y}} }}.)
     }}{{#switch: 
         |no|0|=
         |#default={{#if:  ||  }}
    }}{{#invoke:TemplatePar|check
         |opt      = inline= url= text= datum= date= archivebot= bot= botlauf= fix-attempted= checked=
         |cat      = Wikipedia:Vorlagenfehler/Vorlage:Toter Link
         |errNS    = 0
         |template = Vorlage:Toter Link
         |format   = 
         |preview  = 1
    }}{{#if: https://www.w3.org/TR/xmlschema-0/#InlineTypDefn
      | {{#if:{{#invoke:URLutil|isWebURL|https://www.w3.org/TR/xmlschema-0/#InlineTypDefn}}
          || {{#if:  ||  }} 
        }}
      | {{#if: 
           | {{#if:  ||  }}
           | {{#if:  ||  }}
        }}
    }}{{#if: 
       | {{#if:{{#invoke:DateTime|format||F Y|noerror=1}}
             || {{#if:  ||  }} 
         }}
    }}{{#switch: deadurl
         |checked|deadurl|= 
         |#default=  {{#if:  ||  }}
    }}|#default= https://wiki-de.moshellshocker.dns64.de/index.php?title=Wikipedia:Defekte_Weblinks&dwl=https://www.w3.org/TR/xmlschema-0/#InlineTypDefn Die nachstehende Seite ist {{#switch:|no|0|=|dauerhaft }}nicht mehr abrufbar]{{#if:  | , festgestellt im {{#invoke:DateTime|format||F Y}} }}. (Suche im Internet Archive. )  {{#if: 
            | {{#if: deadurlausgeblendet | | Vorlage:Toter Link/archivebot }}
         }}Vorlage:Toter Link/Core{{#switch: 
          |no|0|=
          |#default= {{#if:  ||  }}
        }}{{#invoke:TemplatePar|check
         |all      = inline= url=
         |opt      = datum= date= archivebot= bot= botlauf= fix-attempted= checked=
         |cat      = Wikipedia:Vorlagenfehler/Vorlage:Toter Link
         |errNS    = 0
         |template = Vorlage:Toter Link
         |format   = 
         |preview  = 1
       }}{{#if: https://www.w3.org/TR/xmlschema-0/#InlineTypDefn
       | {{#if:{{#invoke:URLutil|isWebURL|https://www.w3.org/TR/xmlschema-0/#InlineTypDefn}}
          || {{#if:  ||  }} 
        }}
    }}{{#if: 
         | {{#if:{{#invoke:DateTime|format||F Y|noerror=1}}
             || {{#if:  ||  }} 
           }}
    }}{{#switch: deadurl
         |checked|deadurl|= 
         |#default=  {{#if:  ||  }}
    }}[https://www.w3.org/TR/xmlschema-0/#InlineTypDefn }}|{{#switch: 
   |0|=Vorlage:Toter Link/Core{{#if: https://www.w3.org/TR/xmlschema-0/#InlineTypDefn
       | {{#if:  | [2] }} (Seite {{#switch:|no|0|=|dauerhaft }}nicht mehr abrufbar{{#if:  | , festgestellt im {{#invoke:DateTime|format||F Y}} }}. Suche im Internet Archive ){{#if: 
           | {{#if:  | | Vorlage:Toter Link/archivebot }}
         }}
       |   (Seite {{#switch:|no|0|=|#default=dauerhaft }}nicht mehr abrufbar{{#if:  | , festgestellt im {{#invoke:DateTime|format||F Y}} }}.)
     }}{{#switch: 
         |no|0|=
         |#default={{#if:  ||  }}
    }}{{#invoke:TemplatePar|check
         |opt      = inline= url= text= datum= date= archivebot= bot= botlauf= fix-attempted= checked=
         |cat      = Wikipedia:Vorlagenfehler/Vorlage:Toter Link
         |errNS    = 0
         |template = Vorlage:Toter Link
         |format   = 
         |preview  = 1
    }}{{#if: https://www.w3.org/TR/xmlschema-0/#InlineTypDefn
      | {{#if:{{#invoke:URLutil|isWebURL|https://www.w3.org/TR/xmlschema-0/#InlineTypDefn}}
          || {{#if:  ||  }} 
        }}
      | {{#if: 
           | {{#if:  ||  }}
           | {{#if:  ||  }}
        }}
    }}{{#if: 
       | {{#if:{{#invoke:DateTime|format||F Y|noerror=1}}
             || {{#if:  ||  }} 
         }}
    }}{{#switch: 
         |checked|deadurl|= 
         |#default=  {{#if:  ||  }}
    }}|#default= https://wiki-de.moshellshocker.dns64.de/index.php?title=Wikipedia:Defekte_Weblinks&dwl=https://www.w3.org/TR/xmlschema-0/#InlineTypDefn Die nachstehende Seite ist {{#switch:|no|0|=|dauerhaft }}nicht mehr abrufbar]{{#if:  | , festgestellt im {{#invoke:DateTime|format||F Y}} }}. (Suche im Internet Archive. )  {{#if: 
            | {{#if:  | | Vorlage:Toter Link/archivebot }}
         }}Vorlage:Toter Link/Core{{#switch: 
          |no|0|=
          |#default= {{#if:  ||  }}
        }}{{#invoke:TemplatePar|check
         |all      = inline= url=
         |opt      = datum= date= archivebot= bot= botlauf= fix-attempted= checked=
         |cat      = Wikipedia:Vorlagenfehler/Vorlage:Toter Link
         |errNS    = 0
         |template = Vorlage:Toter Link
         |format   = 
         |preview  = 1
       }}{{#if: https://www.w3.org/TR/xmlschema-0/#InlineTypDefn
       | {{#if:{{#invoke:URLutil|isWebURL|https://www.w3.org/TR/xmlschema-0/#InlineTypDefn}}
          || {{#if:  ||  }} 
        }}
    }}{{#if: 
         | {{#if:{{#invoke:DateTime|format||F Y|noerror=1}}
             || {{#if:  ||  }} 
           }}
    }}{{#switch: 
         |checked|deadurl|= 
         |#default=  {{#if:  ||  }}
    }}[https://www.w3.org/TR/xmlschema-0/#InlineTypDefn }} }}}}}}}}}}{{#if:|
        {{#invoke:Vorlage:Internetquelle|archivBot|stamp={{{archiv-bot}}}|text={{#if:|Vorlage:Webarchiv/archiv-bot}}

}}}}{{#invoke:TemplatePar|check |all= url= titel= |opt= autor= hrsg= format= sprache= titelerg= werk= seiten= datum= abruf= zugriff= abruf-verborgen= archiv-url= archiv-datum= archiv-bot= kommentar= zitat= AT= CH= offline= |cat= {{#ifeq: 0 | 0 | Wikipedia:Vorlagenfehler/Vorlage:Internetquelle}} |template= Vorlage:Internetquelle |format=0 |preview=1 }}</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 />