<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:copyright="http://blogs.law.harvard.edu/tech/rss" xmlns:image="http://purl.org/rss/1.0/modules/image/">
    <channel>
        <title>C#</title>
        <link>http://blogs.escde.net/sebastian/category/17.aspx</link>
        <description>C#</description>
        <language>en-US</language>
        <copyright>Sebastian</copyright>
        <managingEditor>crueger@escde.net</managingEditor>
        <generator>Subtext Version 1.9.3.0</generator>
        <item>
            <title>Entwurfszeit-Funktionalität für Steuerelemente</title>
            <link>http://blogs.escde.net/sebastian/archive/2007/04/16/75.aspx</link>
            <description>&lt;div style="TEXT-JUSTIFY: inter-ideograph; MARGIN: 12pt 0cm 6pt; TEXT-ALIGN: justify"&gt;&lt;font face="Times New Roman" size="3"&gt;Unter folgendem Link können Sie diesen Blog Eintrag als Word Dokument finden: &lt;a href="http://blogs.escde.net/images/blogs_escde_net/sebastian/Design Time Funktionalitt fr Steuerelemente(1).doc"&gt;EntwurfsFunktionalität.doc&lt;/a&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div style="TEXT-JUSTIFY: inter-ideograph; MARGIN: 12pt 0cm 6pt; TEXT-ALIGN: justify"&gt;&lt;strong&gt;&lt;font size="6"&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div style="TEXT-JUSTIFY: inter-ideograph; MARGIN: 12pt 0cm 6pt; TEXT-ALIGN: justify"&gt;&lt;strong&gt;&lt;font size="6"&gt;&lt;a name="_Toc143075450"&gt;&lt;font face="Calibri" color="#17365d" size="5"&gt;Einleitung&lt;/font&gt;&lt;/a&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;font face="Calibri"&gt;Die Entwicklung von Steuerelementen wurde durch das .net Framework stark vereinfacht. Man leitet seinen Anforderungen entsprechend eine Klasse von &lt;strong&gt;&lt;span style="COLOR: teal"&gt;UserControl&lt;/span&gt;&lt;/strong&gt; oder einem anderen Steuerelement, das benötigte Grundfunktionalitäten bietet, ab. Anschließend erweitert man diese Klasse. Um ein Steuerelement allerdings erst so richtig komfortabel nutzen zu können braucht es etwas mehr: hierfür ist eine gewisse Funktionalität zur Entwurfszeit nützlich, wie sie auch von den bereits mit dem Framework mitgelieferten Steuerelementen geboten wird. Zu diesen Annehmlichkeiten gehören unter anderem Smart Tags (siehe Abb. 1) oder übersichtliche Dialogfenster, mit denen man zur Entwurfszeit komfortabel Eigenschaften eines Steuerelements konfigurieren kann (z.B. wie bei der &lt;strong&gt;&lt;em&gt;Mask&lt;/em&gt;&lt;/strong&gt; - Eigenschaft einer &lt;strong&gt;&lt;span style="COLOR: teal"&gt;MaskedTextBox&lt;/span&gt;&lt;/strong&gt;). Dieses White Paper wird die Implementierung solcher Entwurfszeit – Funktionalitäten anhand eines Beispiels erläutern.&lt;/font&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;img height="249" alt="" width="531" src="/images/blogs_escde_net/sebastian/ImagesDesignTimeFunktionalitt/001.PNG" /&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;font face="Calibri"&gt;&lt;strong&gt;Abbildung 1 -&lt;/strong&gt; Schneller Zugriff auf Eigenschaften durch Smart Tags, hier bei einem &lt;/font&gt;&lt;font face="Calibri"&gt;&lt;strong&gt;&lt;span style="COLOR: teal"&gt;DataGridView&lt;/span&gt;&lt;/strong&gt; Steuerelement.&lt;/font&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="TEXT-JUSTIFY: inter-ideograph; MARGIN: 12pt 0cm 6pt; TEXT-ALIGN: justify"&gt;&lt;strong&gt;&lt;font size="6"&gt;&lt;a name="_Toc143075451"&gt;&lt;font face="Calibri" color="#17365d" size="5"&gt;TypeConverters&lt;/font&gt;&lt;/a&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;font face="Calibri"&gt;Das Beispiel das wir in diesem White Paper entwickeln werden, ist ein simples Steuerelement zur Anzeige und Abgabe von Bewertungen (&lt;strong&gt;&lt;span style="COLOR: teal"&gt;RatingControl&lt;/span&gt;&lt;/strong&gt;). Diese Bewertung wird standardmäßig in Form von Sternen angezeigt, wie man es z.B. vom Windows Media Player her kennt. Man kann das verwendete Bild auch verändern (wie in Abbildung 3 zu sehen ist). Ferner kann man den maximalen Wert einstellen. Wir kapseln diese Eigenschaften alle in einer Klasse namens &lt;strong&gt;&lt;span style="COLOR: teal"&gt;Rating&lt;/span&gt;&lt;/strong&gt;.&lt;/font&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;font face="Calibri"&gt; &lt;img height="24" alt="" width="86" src="/images/blogs_escde_net/sebastian/ImagesDesignTimeFunktionalitt/002.PNG" /&gt;                                                  &lt;img height="34" alt="" width="136" src="/images/blogs_escde_net/sebastian/ImagesDesignTimeFunktionalitt/003.PNG" /&gt;                               &lt;/font&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;font face="Calibri"&gt;&lt;strong&gt;Abbildung 2 -&lt;/strong&gt; &lt;strong&gt;&lt;span style="COLOR: teal"&gt;RatingControl&lt;/span&gt;&lt;/strong&gt;,                                 &lt;strong&gt;Abbildung 3 -&lt;/strong&gt; &lt;strong&gt;&lt;span style="COLOR: teal"&gt;RatingControl&lt;/span&gt;&lt;/strong&gt;,&lt;/font&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;font face="Calibri"&gt;                       Standard Aussehen                                            „bombiges“ Aussehen&lt;/font&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;font face="Calibri"&gt;Wie man sehen kann, umfasst die &lt;strong&gt;&lt;span style="COLOR: teal"&gt;Rating&lt;/span&gt;&lt;/strong&gt; – Klasse folgende Eigenschaften: &lt;strong&gt;&lt;em&gt;RatingImage&lt;/em&gt;&lt;/strong&gt;, &lt;strong&gt;&lt;em&gt;Maximum&lt;/em&gt;&lt;/strong&gt; und &lt;strong&gt;&lt;em&gt;RatingValue&lt;/em&gt;&lt;/strong&gt; (die eigentliche Bewertung):&lt;/font&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'"&gt;public&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt; &lt;span style="COLOR: blue"&gt;class&lt;/span&gt; &lt;span style="COLOR: teal"&gt;Rating&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;{&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;        &lt;span style="COLOR: blue"&gt;private&lt;/span&gt; &lt;span style="COLOR: blue"&gt;static&lt;/span&gt; &lt;span style="COLOR: teal"&gt;Image&lt;/span&gt; starImage = &lt;span style="COLOR: teal"&gt;Resources&lt;/span&gt;.star;  &lt;span style="COLOR: green"&gt;//standard bild&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;        &lt;span style="COLOR: blue"&gt;private&lt;/span&gt; &lt;span style="COLOR: teal"&gt;Image&lt;/span&gt; ratingImage = &lt;span style="COLOR: teal"&gt;Rating&lt;/span&gt;.starImage;&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;        &lt;span style="COLOR: blue"&gt;private&lt;/span&gt; &lt;span style="COLOR: blue"&gt;int&lt;/span&gt; maximum       = 5;&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;        &lt;span style="COLOR: blue"&gt;private&lt;/span&gt; &lt;span style="COLOR: blue"&gt;int&lt;/span&gt; ratingValue   = 0;&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;      &lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;        &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;event&lt;/span&gt; &lt;span style="COLOR: teal"&gt;EventHandler&lt;/span&gt; RatingConfigurationChanged;&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;        &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;event&lt;/span&gt; &lt;span style="COLOR: teal"&gt;EventHandler&lt;/span&gt; RatingValueChanged;&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;        &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;int&lt;/span&gt; RatingValue&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;        {&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;            &lt;span style="COLOR: blue"&gt;get&lt;/span&gt; { &lt;span style="COLOR: blue"&gt;return&lt;/span&gt; ratingValue; }&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;            &lt;span style="COLOR: blue"&gt;set&lt;/span&gt; &lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;            {&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;                &lt;span style="COLOR: blue"&gt;if&lt;/span&gt; (ratingValue &amp;lt; 0)&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;                {&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;                &lt;span style="COLOR: blue"&gt;throw&lt;/span&gt; &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; &lt;span style="COLOR: teal"&gt;ArgumentException&lt;/span&gt;(&lt;span style="COLOR: maroon"&gt;"RatingValue musn't be &amp;lt; 0."&lt;/span&gt;);&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;                }&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;                CheckRatingAndMaximum(&lt;span style="COLOR: blue"&gt;value&lt;/span&gt;, &lt;span style="COLOR: blue"&gt;this&lt;/span&gt;.maximum);&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;                &lt;span style="COLOR: blue"&gt;this&lt;/span&gt;.ratingValue = &lt;span style="COLOR: blue"&gt;value&lt;/span&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;                &lt;span style="COLOR: blue"&gt;if&lt;/span&gt; (&lt;span style="COLOR: blue"&gt;this&lt;/span&gt;.RatingValueChanged != &lt;span style="COLOR: blue"&gt;null&lt;/span&gt;)&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;                {&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;                    &lt;span style="COLOR: blue"&gt;this&lt;/span&gt;.RatingValueChanged(&lt;span style="COLOR: blue"&gt;this&lt;/span&gt;, &lt;span style="COLOR: teal"&gt;EventArgs&lt;/span&gt;.Empty);&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;                &lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;            }&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;        }&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;        &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;int&lt;/span&gt; Maximum &lt;span style="COLOR: green"&gt;//maximale Bewertung&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;        {&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;            &lt;span style="COLOR: blue"&gt;get&lt;/span&gt; { &lt;span style="COLOR: blue"&gt;return&lt;/span&gt; maximum; }&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;            &lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'"&gt;set&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;            {&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;                &lt;span style="COLOR: blue"&gt;if&lt;/span&gt; (&lt;span style="COLOR: blue"&gt;value&lt;/span&gt; &amp;lt; 1)&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;                {&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;                    &lt;span style="COLOR: blue"&gt;throw&lt;/span&gt; &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; &lt;span style="COLOR: teal"&gt;ArgumentException&lt;/span&gt;(&lt;span style="COLOR: maroon"&gt;"Value musn't be &amp;lt; 1."&lt;/span&gt;);&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;                &lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;                CheckRatingAndMaximum(&lt;span style="COLOR: blue"&gt;this&lt;/span&gt;.ratingValue, &lt;span style="COLOR: blue"&gt;value&lt;/span&gt;);&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;                maximum = &lt;span style="COLOR: blue"&gt;value&lt;/span&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;                &lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;OnRatingConfigChanged();&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;            }&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;        }&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;        &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: teal"&gt;Image&lt;/span&gt; RatingImage &lt;span style="COLOR: green"&gt;//Das Bild für die Anzeige der Bewertung&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;        &lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;{&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;            &lt;span style="COLOR: blue"&gt;get&lt;/span&gt; { &lt;span style="COLOR: blue"&gt;return&lt;/span&gt; ratingImage; }&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;            &lt;span style="COLOR: blue"&gt;set&lt;/span&gt; &lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;            {&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;                &lt;span style="COLOR: blue"&gt;if&lt;/span&gt; (&lt;span style="COLOR: blue"&gt;value&lt;/span&gt; != &lt;span style="COLOR: blue"&gt;null&lt;/span&gt;)&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;                    ((&lt;span style="COLOR: teal"&gt;Bitmap&lt;/span&gt;)&lt;span style="COLOR: blue"&gt;value&lt;/span&gt;).MakeTransparent();&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;                &lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;ratingImage = &lt;span style="COLOR: blue"&gt;value&lt;/span&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;                OnRatingConfigChanged();&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;            }&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;         }&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;        &lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: gray"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;        &lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; Checks that RatingValue isn't greater than Maximum value.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;        &lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: gray"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;        &lt;span style="COLOR: blue"&gt;private&lt;/span&gt; &lt;span style="COLOR: blue"&gt;void&lt;/span&gt; CheckRatingAndMaximum(&lt;span style="COLOR: blue"&gt;int&lt;/span&gt; proposedRating, &lt;span style="COLOR: blue"&gt;int&lt;/span&gt; &lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt 283.2pt; TEXT-INDENT: 35.4pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;proposedMaximum)&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;        {&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;            &lt;span style="COLOR: blue"&gt;if&lt;/span&gt; (proposedRating &amp;gt; proposedMaximum)&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;            {&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;                &lt;span style="COLOR: blue"&gt;throw&lt;/span&gt; &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; &lt;span style="COLOR: teal"&gt;ArgumentException&lt;/span&gt;(&lt;span style="COLOR: maroon"&gt;"RatingValue can't be greater &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt 318.6pt; TEXT-INDENT: 35.4pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: maroon; FONT-FAMILY: 'Courier New'"&gt;than Maximum."&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;);&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;            }&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;        &lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt; }&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;      &lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: green; FONT-FAMILY: 'Courier New'"&gt;// …&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt 35.4pt"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;&lt;font face="Calibri"&gt;         &lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;font face="Calibri"&gt;Wenn wir jetzt diese &lt;strong&gt;&lt;span style="COLOR: teal"&gt;Rating&lt;/span&gt;&lt;/strong&gt;- Klasse als Typ einer Eigenschaft namens &lt;strong&gt;&lt;em&gt;Rating&lt;/em&gt;&lt;/strong&gt; im Steuerelement nutzen…&lt;/font&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'"&gt;public&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt; &lt;span style="COLOR: blue"&gt;partial&lt;/span&gt; &lt;span style="COLOR: blue"&gt;class&lt;/span&gt; &lt;span style="COLOR: teal"&gt;RatingControl&lt;/span&gt; : &lt;span style="COLOR: teal"&gt;UserControl&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;{&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt; TEXT-INDENT: 35.4pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'"&gt;private&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt; &lt;span style="COLOR: teal"&gt;Rating&lt;/span&gt; rating = &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; &lt;span style="COLOR: teal"&gt;Rating&lt;/span&gt;();&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;      &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: teal"&gt;Rating&lt;/span&gt; Rating&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;      {&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;            &lt;span style="COLOR: blue"&gt;get&lt;/span&gt; { &lt;span style="COLOR: blue"&gt;return&lt;/span&gt; rating; }&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;            &lt;span style="COLOR: blue"&gt;set&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;            {&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt 70.8pt; TEXT-INDENT: 35.4pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: green; FONT-FAMILY: 'Courier New'"&gt;// …&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;                rating = &lt;span style="COLOR: blue"&gt;value&lt;/span&gt;; &lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;                  &lt;span style="COLOR: green"&gt;// …&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;            }&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;      }&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;      &lt;span style="COLOR: green"&gt;// …&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;font face="Calibri"&gt;…und dann versuchen dieses Steuerelement in Visual Studio zu verwenden, bemerken wir ziemlich schnell, dass die &lt;strong&gt;&lt;em&gt;Rating&lt;/em&gt;&lt;/strong&gt; Eigenschaft im Eigenschaften-Fenster überhaupt nicht verändert werden kann (Abb. 4).&lt;/font&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;img height="71" alt="" width="375" src="/images/blogs_escde_net/sebastian/ImagesDesignTimeFunktionalitt/004.PNG" /&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;font face="Calibri"&gt;&lt;strong&gt;Abbildung 4&lt;/strong&gt; – &lt;strong&gt;&lt;em&gt;Rating&lt;/em&gt;&lt;/strong&gt; - Eigenschaft kann nicht verändert werden&lt;/font&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;font face="Calibri"&gt;Diese Problematik tritt allerdings nicht bei allen komplexeren Datentypen auf, so gibt es z.B.&lt;/font&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;font face="Calibri"&gt;für &lt;strong&gt;&lt;span style="COLOR: teal"&gt;Image&lt;/span&gt;&lt;/strong&gt;, &lt;strong&gt;&lt;span style="COLOR: teal"&gt;Size&lt;/span&gt;&lt;/strong&gt;, enums, int etc. bereits &lt;strong&gt;&lt;span style="COLOR: teal"&gt;TypeConverter&lt;/span&gt;&lt;/strong&gt;s. &lt;strong&gt;&lt;span style="COLOR: teal"&gt;TypeConverter&lt;/span&gt;&lt;/strong&gt;s sind Klassen die dabei helfen, die Instanz einer Klasse (die als Typ für eine Eigenschaft des Steuerelements fungiert) zu konvertieren, so dass sie im Eigenschaften- Fenster angezeigt und verändert werden kann. Meistens wird hierfür zu einem String und zurück konvertiert. Für unsere &lt;strong&gt;&lt;span style="COLOR: teal"&gt;Rating&lt;/span&gt;&lt;/strong&gt; Klasse gibt es (noch) keinen &lt;strong&gt;&lt;span style="COLOR: teal"&gt;TypeConverter&lt;/span&gt;&lt;/strong&gt;, daher kann Visual Studio die Instanz nicht entsprechend konvertieren, mit dem Ergebnis, dass wir die Eigenschaft im Eigenschaften Fenster nicht konfigurieren können. Um das zu ändern, benötigen wir nun eine Klasse, die wir von &lt;strong&gt;&lt;span style="COLOR: teal"&gt;ExpandableObjectConverter&lt;/span&gt;&lt;/strong&gt; (&lt;span style="COLOR: black"&gt;System.ComponentModel.Design)&lt;/span&gt; ableiten:   &lt;/font&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'"&gt;public&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt; &lt;span style="COLOR: blue"&gt;class&lt;/span&gt; &lt;span style="COLOR: teal"&gt;RatingTypeConverter&lt;/span&gt; : &lt;span style="COLOR: teal"&gt;ExpandableObjectConverter&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;font face="Calibri"&gt;{ }&lt;/font&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;font face="Calibri"&gt;Wir leiten hier von &lt;strong&gt;&lt;span style="COLOR: teal"&gt;ExpandableObjectConverter&lt;/span&gt;&lt;/strong&gt; und nicht von &lt;strong&gt;&lt;span style="COLOR: teal"&gt;TypeConverter&lt;/span&gt;&lt;/strong&gt; ab, damit man im Eigenschaften- Fenster die Eigenschaft „aufklappen“ kann, und die einzelnen Werte verändern kann, so wie z.B. bei &lt;strong&gt;&lt;em&gt;Size&lt;/em&gt;&lt;/strong&gt; den &lt;strong&gt;&lt;em&gt;Height&lt;/em&gt;&lt;/strong&gt; und &lt;strong&gt;&lt;em&gt;Width&lt;/em&gt;&lt;/strong&gt; Wert (Abbildung 5). &lt;/font&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;img height="60" alt="" width="388" src="/images/blogs_escde_net/sebastian/ImagesDesignTimeFunktionalitt/005.PNG" /&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;font face="Calibri"&gt;&lt;strong&gt;Abbildung 5&lt;/strong&gt; – die &lt;strong&gt;&lt;em&gt;Size&lt;/em&gt;&lt;/strong&gt; Eigenschaft „aufgeklappt“&lt;/font&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;font face="Calibri"&gt;Nun überschreiben wir die &lt;strong&gt;&lt;em&gt;CanConvertTo&lt;/em&gt;&lt;/strong&gt; Methode in dieser Klasse, und geben true zurück wenn destinationType vom Typ String ist. Damit signalisieren wir Visual Studio, dass die Klasse fähig ist, die &lt;strong&gt;&lt;span style="COLOR: teal"&gt;Rating&lt;/span&gt;&lt;/strong&gt; Instanz zu einem String zu konvertieren.&lt;/font&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'"&gt;public&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt; &lt;span style="COLOR: blue"&gt;override&lt;/span&gt; &lt;span style="COLOR: blue"&gt;bool&lt;/span&gt; CanConvertTo(&lt;span style="COLOR: teal"&gt;ITypeDescriptorContext&lt;/span&gt; context, &lt;span style="COLOR: teal"&gt;Type&lt;/span&gt; &lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt 318.6pt; TEXT-INDENT: 35.4pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;destinationType)&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;{&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt; TEXT-INDENT: 35.4pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'"&gt;if&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt; (destinationType.GetType() == &lt;span style="COLOR: blue"&gt;typeof&lt;/span&gt;(&lt;span style="COLOR: blue"&gt;string&lt;/span&gt;))&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;      {&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;            &lt;span style="COLOR: blue"&gt;return&lt;/span&gt; &lt;span style="COLOR: blue"&gt;true&lt;/span&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;      }&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;      &lt;span style="COLOR: blue"&gt;else&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;      {&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;            &lt;span style="COLOR: blue"&gt;return&lt;/span&gt; &lt;span style="COLOR: blue"&gt;base&lt;/span&gt;.CanConvertTo(context, destinationType);&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;      &lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;font face="Calibri"&gt;Genau dies machen wir dann auch, indem wir die &lt;strong&gt;&lt;em&gt;ConvertTo&lt;/em&gt;&lt;/strong&gt; Methode überschreiben: &lt;/font&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'"&gt;public&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt; &lt;span style="COLOR: blue"&gt;override&lt;/span&gt; &lt;span style="COLOR: blue"&gt;object&lt;/span&gt; ConvertTo(&lt;span style="COLOR: teal"&gt;ITypeDescriptorContext&lt;/span&gt; context, &lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt 177pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;System.Globalization.&lt;span style="COLOR: teal"&gt;CultureInfo&lt;/span&gt; culture, &lt;span style="COLOR: blue"&gt;object&lt;/span&gt; value, &lt;span style="COLOR: teal"&gt;Type&lt;/span&gt; destinationType)&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;{ }&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;font face="Calibri"&gt;Nun wird die &lt;strong&gt;&lt;span style="COLOR: teal"&gt;Rating&lt;/span&gt;&lt;/strong&gt; Instanz (im Argument value gegeben) zu einen String konvertiert. Hierfür wandeln wir jeweils die einzelnen Werte der Eigenschaften in einen String um und verbinden diese mit Semikola:&lt;/font&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;    &lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;            &lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: teal; FONT-FAMILY: 'Courier New'"&gt;StringBuilder&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt; stb = &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; &lt;span style="COLOR: teal"&gt;StringBuilder&lt;/span&gt;();                &lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;stb.Append(rating.Maximum.ToString()).Append(&lt;span style="COLOR: maroon"&gt;";"&lt;/span&gt;);&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;stb.Append(rating.RatingValue.ToString()).Append(&lt;span style="COLOR: maroon"&gt;";"&lt;/span&gt;);&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;font face="Calibri"&gt;Um das &lt;strong&gt;&lt;em&gt;RatingImage&lt;/em&gt;&lt;/strong&gt; in einen String zu konvertieren nutzen wir die &lt;strong&gt;&lt;span style="COLOR: teal"&gt;ImageFormatConverter&lt;/span&gt;&lt;/strong&gt; Klasse (System.Drawing). Anschließend geben wir den String zurück. Hier nun der ganze Inhalt der &lt;strong&gt;&lt;em&gt;ConvertTo&lt;/em&gt;&lt;/strong&gt; Methode:&lt;/font&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'"&gt;if&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt; (destinationType.GetType() == &lt;span style="COLOR: blue"&gt;typeof&lt;/span&gt;(&lt;span style="COLOR: blue"&gt;string&lt;/span&gt;))&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;{&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt; TEXT-INDENT: 35.4pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: teal; FONT-FAMILY: 'Courier New'"&gt;Rating&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt; rating = (&lt;span style="COLOR: teal"&gt;Rating&lt;/span&gt;) value;&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt; TEXT-INDENT: 35.4pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: teal; FONT-FAMILY: 'Courier New'"&gt;ImageFormatConverter&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt; imageConverter = &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; &lt;span style="COLOR: teal"&gt;ImageFormatConverter&lt;/span&gt;();&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;                &lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt; TEXT-INDENT: 35.4pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: teal; FONT-FAMILY: 'Courier New'"&gt;StringBuilder&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt; stb = &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; &lt;span style="COLOR: teal"&gt;StringBuilder&lt;/span&gt;();                &lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt; TEXT-INDENT: 35.4pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;stb.Append(rating.Maximum.ToString()).Append(&lt;span style="COLOR: maroon"&gt;";"&lt;/span&gt;);&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt; TEXT-INDENT: 35.4pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;stb.Append(rating.RatingValue.ToString()).Append(&lt;span style="COLOR: maroon"&gt;";"&lt;/span&gt;); &lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;      &lt;span style="COLOR: blue"&gt;if&lt;/span&gt; (rating.RatingImage == &lt;span style="COLOR: blue"&gt;null&lt;/span&gt;)&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;      {&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt; TEXT-INDENT: 35.4pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;      stb.Append(&lt;span style="COLOR: maroon"&gt;"null"&lt;/span&gt;);&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;      }&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;      &lt;span style="COLOR: blue"&gt;else&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt; TEXT-INDENT: 35.4pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;{       &lt;span style="COLOR: green"&gt;//convert rating image and add&lt;/span&gt;     &lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt 35.4pt; TEXT-INDENT: 35.4pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;stb.Append(imageConverter.ConvertToInvariantString(context, &lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt 283.2pt; TEXT-INDENT: 35.4pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;rating.RatingImage)); &lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;      }&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;      &lt;span style="COLOR: blue"&gt;return&lt;/span&gt; stb.ToString();&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'"&gt;else&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;{&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt; TEXT-INDENT: 35.4pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'"&gt;return&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt; &lt;span style="COLOR: blue"&gt;base&lt;/span&gt;.ConvertTo(context, culture, value, destinationType);&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;font face="Calibri"&gt;Nun möchten wir von einem String wieder zu einer &lt;strong&gt;&lt;span style="COLOR: teal"&gt;Rating&lt;/span&gt;&lt;/strong&gt; Instanz zurück konvertieren. Hierzu überschreiben wir die &lt;strong&gt;&lt;em&gt;CanConvertFrom&lt;/em&gt;&lt;/strong&gt; Methode und implementieren diese analog zur &lt;strong&gt;&lt;em&gt;CanConvertTo&lt;/em&gt;&lt;/strong&gt; Methode. Im nächsten Schritt überschreiben wir die &lt;strong&gt;&lt;em&gt;ConvertFrom&lt;/em&gt;&lt;/strong&gt; Methode: &lt;/font&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'"&gt;public&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt; &lt;span style="COLOR: blue"&gt;override&lt;/span&gt; &lt;span style="COLOR: blue"&gt;object&lt;/span&gt; ConvertFrom(&lt;span style="COLOR: teal"&gt;ITypeDescriptorContext&lt;/span&gt; context, &lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt 106.2pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;System.Globalization.&lt;span style="COLOR: teal"&gt;CultureInfo&lt;/span&gt; culture, &lt;span style="COLOR: blue"&gt;object&lt;/span&gt; value)&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;{ }&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;font face="Calibri"&gt;Nun formen wir einen String, der unsere &lt;strong&gt;&lt;span style="COLOR: teal"&gt;Rating&lt;/span&gt;&lt;/strong&gt; Instanz enthält (wieder das Argument value), zurück zur &lt;strong&gt;&lt;span style="COLOR: teal"&gt;Rating&lt;/span&gt;&lt;/strong&gt; Instanz um. Zuerst splitten wir den String bei den Semikola, um die Werte der einzelnen Eigenschaften als Strings zu erhalten:&lt;/font&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;                &lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'"&gt;string&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt; stringValue = (&lt;span style="COLOR: blue"&gt;string&lt;/span&gt;)value;&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'"&gt;string&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;[] values     = stringValue.Split(&lt;span style="COLOR: maroon"&gt;';'&lt;/span&gt;); &lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;font face="Calibri"&gt;Diese einzelnen Strings konvertieren wir in ihren ursprünglichen Typ zurück und setzen damit die Eigenschaften einer neuen &lt;strong&gt;&lt;span style="COLOR: teal"&gt;Rating&lt;/span&gt;&lt;/strong&gt; Instanz. Anschließend geben wir besagte Instanz zurück. Auch hier verwenden wir wieder die &lt;strong&gt;&lt;span style="COLOR: teal"&gt;ImageFormatConverter&lt;/span&gt;&lt;/strong&gt; Klasse um von einem String zurück zu &lt;strong&gt;&lt;span style="COLOR: teal"&gt;Image&lt;/span&gt;&lt;/strong&gt; zu konvertieren. Hier der vollständige Inhalt der &lt;strong&gt;&lt;em&gt;ConvertFrom&lt;/em&gt;&lt;/strong&gt; Methode:&lt;/font&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'"&gt;if&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt; (value.GetType() == &lt;span style="COLOR: blue"&gt;typeof&lt;/span&gt;(&lt;span style="COLOR: blue"&gt;string&lt;/span&gt;))&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;{&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt; TEXT-INDENT: 35.4pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'"&gt;string&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt; stringValue = (&lt;span style="COLOR: blue"&gt;string&lt;/span&gt;)value;&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt 70.8pt; TEXT-INDENT: 35.4pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt 35.4pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: green; FONT-FAMILY: 'Courier New'"&gt;//values sind Werte der einzelnen Eigenschaften&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;      &lt;span style="COLOR: blue"&gt;string&lt;/span&gt;[] values     = stringValue.Split(&lt;span style="COLOR: maroon"&gt;';'&lt;/span&gt;); &lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;      &lt;span style="COLOR: teal"&gt;Rating&lt;/span&gt; returnRating = &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; &lt;span style="COLOR: teal"&gt;Rating&lt;/span&gt;();&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;      returnRating.Maximum     = &lt;span style="COLOR: blue"&gt;int&lt;/span&gt;.Parse(values[0]);&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;      returnRating.RatingValue = &lt;span style="COLOR: blue"&gt;int&lt;/span&gt;.Parse(values[1]);&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;      &lt;span style="COLOR: teal"&gt;ImageFormatConverter&lt;/span&gt; imageConverter = &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; &lt;span style="COLOR: teal"&gt;ImageFormatConverter&lt;/span&gt;();&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;      &lt;span style="COLOR: blue"&gt;if&lt;/span&gt; (values[2] == &lt;span style="COLOR: maroon"&gt;"null"&lt;/span&gt;)&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;      {&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;            returnRating.RatingImage = &lt;span style="COLOR: blue"&gt;null&lt;/span&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;      }&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;       &lt;span style="COLOR: blue"&gt;else&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;       {&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;            returnRating.RatingImage = (&lt;span style="COLOR: teal"&gt;Image&lt;/span&gt;)imageConverter.&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt 141.6pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;ConvertFromInvariantString(context, values[2]);&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;       }&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt; TEXT-INDENT: 35.4pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'"&gt;return&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt; returnRating;&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;font face="Calibri"&gt;Nun fügen wir zusätzlich noch das &lt;strong&gt;&lt;span style="COLOR: teal"&gt;TypeConverterAttribut&lt;/span&gt;&lt;/strong&gt; mit unserer &lt;strong&gt;&lt;span style="COLOR: teal"&gt;RatingTypeConverter&lt;/span&gt;&lt;/strong&gt; Klasse als Argument zur &lt;strong&gt;&lt;span style="COLOR: teal"&gt;Rating&lt;/span&gt;&lt;/strong&gt; Klasse hinzu: &lt;/font&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;[&lt;span style="COLOR: teal"&gt;TypeConverter&lt;/span&gt;(&lt;span style="COLOR: blue"&gt;typeof&lt;/span&gt;(&lt;span style="COLOR: teal"&gt;RatingTypeConverter&lt;/span&gt;))]&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'"&gt;public&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt; &lt;span style="COLOR: blue"&gt;class&lt;/span&gt; &lt;span style="COLOR: teal"&gt;Rating&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;{ }&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;font face="Calibri"&gt;Voila, nun kann Visual Studio die &lt;strong&gt;&lt;span style="COLOR: teal"&gt;Rating&lt;/span&gt;&lt;/strong&gt; Klasse entsprechend konvertieren, und wir damit die &lt;strong&gt;&lt;em&gt;Rating&lt;/em&gt;&lt;/strong&gt; Eigenschaft unseres Steuerelements bequem im Eigenschaften Fenster nutzen und verändern, wie man in Abbildung 6 sehen kann.&lt;/font&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;img height="77" alt="" width="357" src="/images/blogs_escde_net/sebastian/ImagesDesignTimeFunktionalitt/006.PNG" /&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;font face="Calibri"&gt;&lt;strong&gt;Abbildung 6&lt;/strong&gt; - die einzelnen Werte der &lt;strong&gt;&lt;em&gt;Rating&lt;/em&gt;&lt;/strong&gt; Eigenschaft können nun im Eigenschaften- &lt;/font&gt;&lt;font face="Calibri"&gt;Fenster verändert werden&lt;/font&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;font face="Calibri"&gt;Bei dem Steuerelement das wir hier nutzen, ist die Implementierung einer extra Klasse für die Eigenschaften (was ja mittels der &lt;strong&gt;&lt;span style="COLOR: teal"&gt;Rating&lt;/span&gt;&lt;/strong&gt; Klasse gemacht wurde) wahrscheinlich nicht sehr sinnvoll. Bei anderen Steuerelementen ist es jedoch häufig der Fall, dass man Eigenschaften mit eigenen Klassen hat. Um diese Eigenschaften dann entsprechend im Eigenschaften Fenster nutzen zu können, muss man dann, wie oben beschrieben, für die eigenen Klassen entsprechende &lt;strong&gt;&lt;span style="COLOR: teal"&gt;TypeConverter&lt;/span&gt;&lt;/strong&gt;s implementieren, wobei sich &lt;strong&gt;&lt;span style="COLOR: teal"&gt;ExpandableObjectConverter&lt;/span&gt;&lt;/strong&gt; als Basisklasse hierfür bestens eignet.&lt;/font&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="TEXT-JUSTIFY: inter-ideograph; MARGIN: 12pt 0cm 6pt; TEXT-ALIGN: justify"&gt;&lt;strong&gt;&lt;font size="6"&gt;&lt;a name="_Toc143075452"&gt;&lt;font face="Calibri" color="#17365d" size="5"&gt;Dialoge zur Entwurfszeit&lt;/font&gt;&lt;/a&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;font face="Calibri"&gt;Um die &lt;strong&gt;&lt;em&gt;Rating&lt;/em&gt;&lt;/strong&gt; Eigenschaft des Steuerelementes noch komfortabler konfigurieren zu können bietet es sich an, einen Dialog dafür im Eigenschaften Fenster anzuzeigen, wie es bei anderen Steuerelementen, z.B. bei der &lt;strong&gt;&lt;em&gt;Mask&lt;/em&gt;&lt;/strong&gt; Eigenschaft der &lt;strong&gt;&lt;span style="COLOR: teal"&gt;MaskedTextBox&lt;/span&gt;&lt;/strong&gt;, auch der Fall ist. Gerade bei Eigenschaften, die umständlich zu konfigurieren sind, oder wo viele Werte eingestellt werden müssen, kann ein Dialog zur Entwurfszeit eine wertvolle Unterstützung sein. Zuerst leitet man hierfür eine Klasse von &lt;strong&gt;&lt;span style="COLOR: teal"&gt;UITypeEditor&lt;/span&gt;&lt;/strong&gt; (System.Drawing.Design) ab:&lt;/font&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'"&gt;public&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt; &lt;span style="COLOR: blue"&gt;class&lt;/span&gt; &lt;span style="COLOR: teal"&gt;RatingEditor&lt;/span&gt; : &lt;span style="COLOR: teal"&gt;UITypeEditor&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;{ }&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;font face="Calibri"&gt;Im Anschluss daran überschreiben wir die &lt;strong&gt;&lt;em&gt;GetEditStyle&lt;/em&gt;&lt;/strong&gt; Methode, und geben UITypeEditorEditStyle.Modal zurück:&lt;/font&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'"&gt;public&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt; &lt;span style="COLOR: blue"&gt;override&lt;/span&gt; &lt;span style="COLOR: teal"&gt;UITypeEditorEditStyle&lt;/span&gt; &lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;GetEditStyle(System.ComponentModel.&lt;span style="COLOR: teal"&gt;ITypeDescriptorContext&lt;/span&gt; context)&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;{&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt; TEXT-INDENT: 35.4pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'"&gt;return&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt; &lt;span style="COLOR: teal"&gt;UITypeEditorEditStyle&lt;/span&gt;.Modal;&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;font face="Calibri"&gt;Damit veranlassen wir, dass neben der &lt;strong&gt;&lt;em&gt;Rating&lt;/em&gt;&lt;/strong&gt; Eigenschaft im Eigenschaften Fenster ein Button angezeigt wird (Abbildung 7). Durch klicken auf diesen Button wird dann unser Dialog angezeigt werden. &lt;/font&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;img height="50" alt="" width="397" src="/images/blogs_escde_net/sebastian/ImagesDesignTimeFunktionalitt/007.PNG" /&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;font face="Calibri"&gt;&lt;strong&gt;Abbildung 7&lt;/strong&gt; – rechts neben der Eigenschaft der Button für unseren Dialog&lt;/font&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;font face="Calibri"&gt;Falls man anstatt eines Dialoges ein Drop-Down Steuerelement anzeigen will (wie z.B. bei Eigenschaften die ein enum als Typ haben), würde man hier stattdessen UITypeEditorEditStyle.DropDown zurückgeben. Um nun unseren Dialog anzeigen zu können, überschreiben wir die &lt;strong&gt;&lt;em&gt;EditValue&lt;/em&gt;&lt;/strong&gt; Methode: &lt;/font&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'"&gt;public&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt; &lt;span style="COLOR: blue"&gt;override&lt;/span&gt; &lt;span style="COLOR: blue"&gt;object&lt;/span&gt; EditValue(System.ComponentModel.&lt;span style="COLOR: teal"&gt;ITypeDescriptorContext&lt;/span&gt; context, &lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt 141.6pt; TEXT-INDENT: 35.4pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: teal; FONT-FAMILY: 'Courier New'"&gt;IServiceProvider&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt; provider, &lt;span style="COLOR: blue"&gt;object&lt;/span&gt; value)&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;{ }&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;font face="Calibri"&gt;In dieser Methode öffnen wir unseren Dialog und bearbeiten den Wert der Eigenschaft. Dieser Wert befindet sich im value Argument der Methode. Anschließend geben wir unseren ggf. veränderten Wert zurück:&lt;/font&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'"&gt;public&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt; &lt;span style="COLOR: blue"&gt;override&lt;/span&gt; &lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'"&gt;object&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt; EditValue(System.ComponentModel.&lt;span style="COLOR: teal"&gt;ITypeDescriptorContext&lt;/span&gt; context, &lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt 177pt; TEXT-INDENT: 35.4pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: teal; FONT-FAMILY: 'Courier New'"&gt;IServiceProvider&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt; provider, &lt;span style="COLOR: blue"&gt;object&lt;/span&gt; value)&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;{&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt; TEXT-INDENT: 35.4pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'"&gt;return&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt; &lt;span style="COLOR: blue"&gt;this&lt;/span&gt;.ShowRatingConfigurationDialog((&lt;span style="COLOR: teal"&gt;Rating&lt;/span&gt;)value);&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'"&gt;public&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt; &lt;span style="COLOR: teal"&gt;Rating&lt;/span&gt; ShowRatingConfigurationDialog(&lt;span style="COLOR: teal"&gt;Rating&lt;/span&gt; rating)&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;{&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt 35.4pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: teal; FONT-FAMILY: 'Courier New'"&gt;RatingConfigurationDialog&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt; dlg = &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; &lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt 141.6pt; TEXT-INDENT: 35.4pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: teal; FONT-FAMILY: 'Courier New'"&gt; RatingConfigurationDialog&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;(rating.Clone());&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;      &lt;span style="COLOR: blue"&gt;if&lt;/span&gt; (dlg.ShowDialog() == System.Windows.Forms.&lt;span style="COLOR: teal"&gt;DialogResult&lt;/span&gt;.OK)&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;      {&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;            &lt;span style="COLOR: blue"&gt;return&lt;/span&gt; dlg.Rating;&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;      }&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;      &lt;span style="COLOR: blue"&gt;return&lt;/span&gt; rating;&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;font face="Calibri"&gt;Zum Schluss fügen wir nun abermals ein Attribut, in diesem Fall das &lt;strong&gt;&lt;span style="COLOR: teal"&gt;EditorAttribute&lt;/span&gt;&lt;/strong&gt;, zur &lt;strong&gt;&lt;span style="COLOR: teal"&gt;Rating&lt;/span&gt;&lt;/strong&gt; Klasse hinzu, und übergeben als Argument unsere &lt;strong&gt;&lt;span style="COLOR: teal"&gt;RatingEditor&lt;/span&gt;&lt;/strong&gt; Klasse und deren Basisklasse, also &lt;strong&gt;&lt;span style="COLOR: teal"&gt;UITypeEditor&lt;/span&gt;&lt;/strong&gt;:&lt;/font&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;[&lt;span style="COLOR: teal"&gt;Editor&lt;/span&gt;(&lt;span style="COLOR: blue"&gt;typeof&lt;/span&gt;(&lt;span style="COLOR: teal"&gt;RatingEditor&lt;/span&gt;), &lt;span style="COLOR: blue"&gt;typeof&lt;/span&gt;(&lt;span style="COLOR: teal"&gt;UITypeEditor&lt;/span&gt;))]&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: #999999; FONT-FAMILY: 'Courier New'"&gt;[TypeConverter(typeof(RatingTypeConverter))]&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'"&gt;public&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt; &lt;span style="COLOR: blue"&gt;class&lt;/span&gt; &lt;span style="COLOR: teal"&gt;Rating&lt;/span&gt; { &lt;span style="COLOR: green"&gt;/* ... */ &lt;/span&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;font face="Calibri"&gt;Nun können wir unseren Dialog nutzen, um eine &lt;strong&gt;&lt;span style="COLOR: teal"&gt;Rating&lt;/span&gt;&lt;/strong&gt; Instanz (in diesem Fall die &lt;strong&gt;&lt;em&gt;Rating&lt;/em&gt;&lt;/strong&gt; Eigenschaft des Steuerelements) im Eigenschaften Fenster zu konfigurieren, wie man in Abbildung 8 sehen kann.&lt;/font&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;img height="294" alt="" width="397" src="/images/blogs_escde_net/sebastian/ImagesDesignTimeFunktionalitt/008.PNG" /&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;font face="Calibri"&gt;&lt;strong&gt;Abbildung 8&lt;/strong&gt; – Konfiguration der &lt;strong&gt;&lt;em&gt;Rating&lt;/em&gt;&lt;/strong&gt; Eigenschaft via Dialog&lt;/font&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;font face="Calibri"&gt;Es ist im Allgemeinen empfehlenswert das zu konfigurierende Steuerelement zum Dialog hinzuzufügen, damit man Veränderungen sofort sehen kann, und ggf. abbrechen kann. Die Veränderungen sofort sehen zu können ist gerade praktisch wenn viele Werte einzustellen sind. Zum Schluss sei noch erwähnt, dass das .NET Framework einige alltäglich verwendete Klassen besitzt, die bereits mit eigenen Editoren ausgestattet sind, wie z.B. &lt;strong&gt;&lt;span style="COLOR: teal"&gt;Font&lt;/span&gt;&lt;/strong&gt;, &lt;strong&gt;&lt;span style="COLOR: teal"&gt;Image&lt;/span&gt;&lt;/strong&gt; und &lt;strong&gt;&lt;span style="COLOR: teal"&gt;Color&lt;/span&gt;&lt;/strong&gt;. Dies bedeutet, dass sie für diese nicht ihre eigenen Editoren implementieren müssen (für weitere Informationen zu den Editoren dieser Klassen siehe &lt;a href="http://msdn2.microsoft.com/de-de/library/bfc7teys.aspx"&gt;http://msdn2.microsoft.com/de-de/library/bfc7teys.aspx&lt;/a&gt;).&lt;/font&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="TEXT-JUSTIFY: inter-ideograph; MARGIN: 12pt 0cm 6pt; TEXT-ALIGN: justify"&gt;&lt;strong&gt;&lt;font size="6"&gt;&lt;a name="_Toc143075453"&gt;&lt;font face="Calibri" color="#17365d" size="5"&gt;Smart Tags&lt;/font&gt;&lt;/a&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;font face="Calibri"&gt;Smart Tags wurden mit Visual Studio 2005 neu eingeführt, zumindest was ihre Verwendung in IDEs anbelangt (sie existieren schon seit Office XP). Wie bereits in der Einleitung erwähnt ermöglichen sie den schnellen Zugriff auf Funktionen zum konfigurieren eines Steuerelements. Hierfür können auf der Smart Tag Panele 4 Arten von Elementen angezeigt werden: einfachere wie Kategorien (zur Unterteilung der Panele) und Text (Abb.9), sowie Kommandos (werden als Link dargestellt – siehe Abb. 10) oder Eigenschaften. Eigenschaften werden genauso angezeigt wie im Eigenschaften Fenster (Abb. 11), auch hierbei spielen Editoren wieder eine Rolle.&lt;/font&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;img height="76" alt="" width="359" src="/images/blogs_escde_net/sebastian/ImagesDesignTimeFunktionalitt/009.PNG" /&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;font face="Calibri"&gt;&lt;strong&gt;Abbildung 9&lt;/strong&gt; – Kategorie und Text auf der Smart Tag Panele&lt;/font&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;img height="58" alt="" width="309" src="/images/blogs_escde_net/sebastian/ImagesDesignTimeFunktionalitt/010.PNG" /&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;font face="Calibri"&gt;&lt;strong&gt;Abbildung 10&lt;/strong&gt; – Kommando auf der Smart Tag Panele&lt;/font&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;img height="61" alt="" width="444" src="/images/blogs_escde_net/sebastian/ImagesDesignTimeFunktionalitt/011.PNG" /&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;font face="Calibri"&gt;&lt;strong&gt;Abbildung 11&lt;/strong&gt; – Eigenschaft auf der Smart Tag Panel, hier die &lt;strong&gt;&lt;em&gt;RatingImage&lt;/em&gt;&lt;/strong&gt; Eigenschaft&lt;/font&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;font face="Calibri"&gt;Wir fangen damit an, dass wir definieren was alles an Befehlen auf der Smart Tag Panele auftauchen soll. Wir erreichen dies, indem wir eine Klasse von &lt;strong&gt;&lt;span style="COLOR: teal"&gt;DesignerActionList  &lt;/span&gt;(System.ComponentModel.Design,  in der System.Design.dll) ableiten:&lt;/strong&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'"&gt;public&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt; &lt;span style="COLOR: blue"&gt;class&lt;/span&gt; &lt;span style="COLOR: teal"&gt;RatingActionList&lt;/span&gt; : &lt;span style="COLOR: teal"&gt;DesignerActionList&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;{ }&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;font face="Calibri"&gt;Danach definieren wir einen Konstruktor, der ein Argument vom Typ &lt;strong&gt;&lt;span style="COLOR: teal"&gt;RatingControl&lt;/span&gt;&lt;/strong&gt; hat, das Steuerelement für das wir Smart Tag nutzen wollen. Dieses Argument übergeben wir an den Konstruktor der Basisklasse und legen zudem noch eine Referenz davon als privates Feld an:&lt;/font&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'"&gt;private&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt; &lt;span style="COLOR: teal"&gt;RatingControl&lt;/span&gt; control = &lt;span style="COLOR: blue"&gt;null&lt;/span&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'"&gt;public&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt; RatingActionList(&lt;span style="COLOR: teal"&gt;RatingControl&lt;/span&gt; control) : &lt;span style="COLOR: blue"&gt;base&lt;/span&gt; (control)&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;{&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt; TEXT-INDENT: 35.4pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'"&gt;this&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;.control = control;&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;font face="Calibri"&gt;Nun implementieren wir die Elemente. Für Kommandos implementieren wir Methoden, wie die &lt;strong&gt;&lt;em&gt;ConfigureRating&lt;/em&gt;&lt;/strong&gt; Methode hier, die den gleichen Dialog aufruft, den wir schon oben genutzt haben:&lt;/font&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'"&gt;public&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt; &lt;span style="COLOR: blue"&gt;void&lt;/span&gt; ConfigureRating()&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;{&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt; TEXT-INDENT: 35.4pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: teal; FONT-FAMILY: 'Courier New'"&gt;RatingEditor&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt; editor = &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; &lt;span style="COLOR: teal"&gt;RatingEditor&lt;/span&gt;();&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;      &lt;span style="COLOR: teal"&gt;Rating&lt;/span&gt; rating = editor.&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt 106.2pt; TEXT-INDENT: 35.4pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;ShowRatingConfigurationDialog(&lt;span style="COLOR: blue"&gt;this&lt;/span&gt;.control.Rating);&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;            &lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt 35.4pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: teal; FONT-FAMILY: 'Courier New'"&gt;PropertyDescriptor&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt; propDescriptor = &lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt 106.2pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: teal; FONT-FAMILY: 'Courier New'"&gt;TypeDescriptor&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;.GetProperties(&lt;span style="COLOR: blue"&gt;this&lt;/span&gt;.control)[&lt;span style="COLOR: maroon"&gt;"Rating"&lt;/span&gt;];&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;      propDescriptor.SetValue(&lt;span style="COLOR: blue"&gt;this&lt;/span&gt;.control, rating);&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;font face="Calibri"&gt;Das einzige was hierbei zu beachten ist, ist dass die Werte des Steuerelements nicht direkt verändert werden sollten, sondern stattdessen wie oben im Quellcode über die &lt;strong&gt;&lt;span style="COLOR: teal"&gt;PropertyDescriptor&lt;/span&gt;&lt;/strong&gt; Klasse:&lt;/font&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: teal; FONT-FAMILY: 'Courier New'"&gt;PropertyDescriptor&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt; propDescriptor = &lt;span style="COLOR: teal"&gt;TypeDescriptor&lt;/span&gt;.&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt 177pt; TEXT-INDENT: 35.4pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;GetProperties(&lt;span style="COLOR: blue"&gt;this&lt;/span&gt;.control)[&lt;span style="COLOR: maroon"&gt;"Rating"&lt;/span&gt;];&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;propDescriptor.SetValue(&lt;span style="COLOR: blue"&gt;this&lt;/span&gt;.control, rating);&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;font face="Calibri"&gt;Ohne die Verwendung von &lt;strong&gt;&lt;span style="COLOR: teal"&gt;PropertyDescriptor&lt;/span&gt;&lt;/strong&gt; bekommt die Visual Studio Infrastruktur die Veränderung des Steuerelementes nicht mit, was zur Folge hat, dass man z.B. den „Rückgängig“ Befehl in Visual Studio nicht nutzen kann um diese Veränderungen rückgängig machen zu können. Die eigentlichen Veränderungen am Steuerelement würden natürlich auch ohne &lt;strong&gt;&lt;span style="COLOR: teal"&gt;PropertyDescriptor&lt;/span&gt;&lt;/strong&gt; dennoch stattfinden. Ansonsten sind sie ziemlich frei in dem was sie innerhalb der Methode implementieren. Um diese Methode nun als Kommando auf der Smart Tag Panele angezeigt zu bekommen überschreiben wir die &lt;strong&gt;&lt;em&gt;GetSortedActionItems&lt;/em&gt;&lt;/strong&gt; Methode: &lt;/font&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'"&gt;public&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt; &lt;span style="COLOR: blue"&gt;override&lt;/span&gt; &lt;span style="COLOR: teal"&gt;DesignerActionItemCollection&lt;/span&gt; GetSortedActionItems()&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;{ }&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;font face="Calibri"&gt;In dieser Methode erzeugen wir eine &lt;strong&gt;&lt;span style="COLOR: teal"&gt;DesignerActionItemCollection&lt;/span&gt;&lt;/strong&gt; Instanz.&lt;/font&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: teal; FONT-FAMILY: 'Courier New'"&gt;DesignerActionItemCollection&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt; collection = &lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt 212.4pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'"&gt;new &lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: teal; FONT-FAMILY: 'Courier New'"&gt;DesignerActionItemCollection&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;();&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;font face="Calibri"&gt;Zu dieser collection werden alle Elemente hinzugefügt, die wir auf der Smart Tag Panele haben wollen. Für unsere &lt;strong&gt;&lt;em&gt;ConfigureRating&lt;/em&gt;&lt;/strong&gt; Methode von oben brauchen wir eine &lt;strong&gt;&lt;span style="COLOR: teal"&gt;DesignerActionMethodItem&lt;/span&gt;&lt;/strong&gt; Instanz. Im Konstruktor des &lt;strong&gt;&lt;span style="COLOR: teal"&gt;DesignerActionMethodItem&lt;/span&gt;&lt;/strong&gt; gibt man zuerst eine Instanz der &lt;strong&gt;&lt;span style="COLOR: teal"&gt;DesignerActionList&lt;/span&gt;&lt;/strong&gt; Klasse an, danach den Namen der Methode die beim Klicken des Kommandos aufgerufen wird (achten sie darauf, dass sie den Methodennamen absolut korrekt schreiben. Da dieser als String übergeben wird, würde sich ein Fehler beim Kompilieren nicht bemerkbar machen). Dem folgen ein kurzer Text, der auf der Panele als Link angezeigt wird für das Kommando, die Kategorie des Kommandos sowie eine Beschreibung die ggf. als Tooltip auftaucht. Zuletzt kommt ein Argument vom Typ bool. Dieses bestimmt, ob das Kommando auch als DesignerVerb verwendet werden soll (also zur Entwurfszeit auch im Kontextmenü des Steuerelementes verfügbar sein soll):&lt;/font&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;collection.Add(&lt;span style="COLOR: blue"&gt;new&lt;/span&gt; &lt;span style="COLOR: teal"&gt;DesignerActionMethodItem&lt;/span&gt;(&lt;span style="COLOR: blue"&gt;this&lt;/span&gt;, &lt;span style="COLOR: maroon"&gt;"ConfigureRating"&lt;/span&gt;, &lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;               &lt;span style="COLOR: maroon"&gt;"Configure..."&lt;/span&gt;, &lt;span style="COLOR: maroon"&gt;""&lt;/span&gt;, &lt;span style="COLOR: maroon"&gt;"Configure Rating property..."&lt;/span&gt;, &lt;span style="COLOR: blue"&gt;true&lt;/span&gt;));&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;font face="Calibri"&gt;Wie man oben sieht, fügen wir diese &lt;strong&gt;&lt;span style="COLOR: teal"&gt;DesignerActionMethodItem&lt;/span&gt;&lt;/strong&gt; Instanz zur collection hinzu. Um jetzt zusätzlich noch eine Eigenschaft auf der Smart Tag Panele anzuzeigen fügt man der Klasse eine Property hinzu, in diesem Fall &lt;strong&gt;&lt;em&gt;RatingImage&lt;/em&gt;&lt;/strong&gt;:&lt;/font&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'"&gt;public&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt; &lt;span style="COLOR: teal"&gt;Image&lt;/span&gt; RatingImage&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;{&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt; TEXT-INDENT: 35.4pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'"&gt;get&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;      {&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt; TEXT-INDENT: 35.4pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;      &lt;span style="COLOR: blue"&gt;return&lt;/span&gt; &lt;span style="COLOR: blue"&gt;this&lt;/span&gt;.control.Rating.RatingImage;&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;      }&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;      &lt;span style="COLOR: blue"&gt;set&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;      {&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;            &lt;span style="COLOR: teal"&gt;PropertyDescriptor&lt;/span&gt; propDescriptor = &lt;span style="COLOR: teal"&gt;TypeDescriptor&lt;/span&gt;.&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt 106.2pt; TEXT-INDENT: 35.4pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;GetProperties(&lt;span style="COLOR: blue"&gt;this&lt;/span&gt;.control.Rating)[&lt;span style="COLOR: maroon"&gt;"RatingImage"&lt;/span&gt;];&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;            propDescriptor.SetValue(&lt;span style="COLOR: blue"&gt;this&lt;/span&gt;.control.Rating, &lt;span style="COLOR: blue"&gt;value&lt;/span&gt;);&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;      }&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;font face="Calibri"&gt;Auch hier nutzen wir wieder wie oben in der Methode die &lt;strong&gt;&lt;span style="COLOR: teal"&gt;PropertyDescriptor&lt;/span&gt;&lt;/strong&gt; Klasse. Ansonsten gibt es keine weiteren Besonderheiten. Um diese &lt;strong&gt;&lt;em&gt;RatingImage&lt;/em&gt;&lt;/strong&gt; Eigenschaft der Smart Tag Panele hinzuzufügen, fügen wir der collection von oben noch eine &lt;strong&gt;&lt;span style="COLOR: teal"&gt;DesignerActionPropertyItem&lt;/span&gt;&lt;/strong&gt; Instanz hinzu:&lt;/font&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;collection.Add(&lt;span style="COLOR: blue"&gt;new&lt;/span&gt; &lt;span style="COLOR: teal"&gt;DesignerActionPropertyItem&lt;/span&gt;(&lt;span style="COLOR: maroon"&gt;"RatingImage"&lt;/span&gt;, &lt;span style="COLOR: maroon"&gt;"RatingImage"&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&lt;font color="#000000"&gt;));&lt;/font&gt;&lt;/span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt 389.4pt; TEXT-INDENT: 35.4pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;font face="Calibri"&gt;Das erste Argument des &lt;strong&gt;&lt;span style="COLOR: teal"&gt;DesignerActionPropertyItem&lt;/span&gt;&lt;/strong&gt; Konstruktors ist der Name der Eigenschaft auf die zurückgegriffen wird. Das zweite Argument ist Text, der für dieses Element auf der Smart Tag Panele angezeigt wird (vor dem eigentlichen Steuerelement was zum Anzeigen und Verändern der Eigenschaft verwendet wird). Wie die Eigenschaft auf der Smart Tag Panele verändert werden kann, wird wieder über Editoren bestimmt (also analog zu oben - „3. Dialoge zur Entwurfszeit“). Doch da die Klasse &lt;strong&gt;&lt;span style="COLOR: teal"&gt;Image&lt;/span&gt;&lt;/strong&gt; bereits über einen eigenen Editor verfügt, brauchen wir uns hierum nicht zu kümmern.&lt;/font&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;font face="Calibri"&gt;Um eine Kategorie zur Smart Tag Panele hinzuzufügen, fügt man eine &lt;strong&gt;&lt;span style="COLOR: teal"&gt;DesignerActionHeaderItem&lt;/span&gt;&lt;/strong&gt; Instanz mit dem Namen der Kategorie zur collection hinzu: &lt;/font&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;collection.Add(&lt;span style="COLOR: blue"&gt;new&lt;/span&gt; &lt;span style="COLOR: teal"&gt;DesignerActionHeaderItem&lt;/span&gt;(&lt;span style="COLOR: maroon"&gt;"Control Information"&lt;/span&gt;));&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;font face="Calibri"&gt;Will man Text (hier als Beispiel die &lt;strong&gt;&lt;em&gt;Size&lt;/em&gt;&lt;/strong&gt; – Werte des Steuerelementes) zur Smart Tag Panele hinzufügen nimmt man dazu eine &lt;strong&gt;&lt;span style="COLOR: teal"&gt;DesignerActionTextItem&lt;/span&gt;&lt;/strong&gt; Instanz, mit dem Text und der Kategorie zu der dieses Element gehört als Konstruktorargumente und fügt diese Instanz zur collection hinzu:&lt;/font&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;collection.Add(&lt;span style="COLOR: blue"&gt;new&lt;/span&gt; &lt;span style="COLOR: teal"&gt;DesignerActionTextItem&lt;/span&gt;(&lt;span style="COLOR: teal"&gt;String&lt;/span&gt;.Format(&lt;span style="COLOR: maroon"&gt;"Size: {0} x {1}"&lt;/span&gt;, &lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt 35.4pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;   &lt;span style="COLOR: blue"&gt;this&lt;/span&gt;.control.Height, &lt;span style="COLOR: blue"&gt;this&lt;/span&gt;.control.Width), &lt;span style="COLOR: maroon"&gt;"Control Information"&lt;/span&gt;));&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;font face="Calibri"&gt;Nachdem wir nun alle Elemente die wir auf der Smart Tag Panele haben wollen zur collection hinzugefügt haben, geben wir diese anschließend zurück:&lt;/font&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'"&gt;return&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt; collection;   &lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;font face="Calibri"&gt;Es gibt übrigens bei allen oben aufgeführten Klassen überladene Kontruktoren, auch einige die es zulassen, dass man jedem Element eine Kategorie zuordnet (was wir nur bei dem &lt;strong&gt;&lt;span style="COLOR: teal"&gt;DesignerActionTextItem&lt;/span&gt;&lt;/strong&gt; gemacht haben). Zusätzlich sei noch erwähnt, dass die Elemente auf der Smart Tag Panele in der gleichen Reihenfolge auftauchen werden, wie sie der collection hinzugefügt wurden. Als letzten Schritt leiten wir nun eine Klasse von &lt;strong&gt;&lt;span style="COLOR: teal"&gt;ControlDesigner&lt;/span&gt;&lt;/strong&gt; (System.Windows.Forms.Design) ab:&lt;/font&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt 18pt"&gt;&lt;font face="Calibri"&gt;&lt;span&gt;        &lt;/span&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'"&gt;public&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt; &lt;span style="COLOR: blue"&gt;class&lt;/span&gt; &lt;span style="COLOR: teal"&gt;RatingControlDesigner&lt;/span&gt; : &lt;span style="COLOR: teal"&gt;ControlDesigner&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;{ }&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt 18pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;font face="Calibri"&gt;Hier überschreiben wir die &lt;strong&gt;&lt;em&gt;ActionLists&lt;/em&gt;&lt;/strong&gt; Eigenschaft:&lt;/font&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt; TEXT-INDENT: 18pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt; TEXT-INDENT: 18pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'"&gt;public&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt; &lt;span style="COLOR: blue"&gt;override&lt;/span&gt; &lt;span style="COLOR: teal"&gt;DesignerActionListCollection&lt;/span&gt; ActionLists&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;{&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt; TEXT-INDENT: 35.4pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'"&gt;get&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;{ }&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt 18pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;font face="Calibri"&gt;In dem get Accessor der Eigenschaft instanzieren wir eine Instanz vom Typ &lt;strong&gt;&lt;span style="COLOR: teal"&gt;DesignerActionListCollection&lt;/span&gt;&lt;/strong&gt; und fügen dieser collection eine Instanz unserer &lt;strong&gt;&lt;span style="COLOR: teal"&gt;RatingActionList&lt;/span&gt;&lt;/strong&gt; Klasse von oben hinzu. Anschließend geben wir die collection zurück:&lt;/font&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: teal; FONT-FAMILY: 'Courier New'"&gt;DesignerActionListCollection&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt; collection = &lt;span style="COLOR: blue"&gt;new&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt 212.4pt; TEXT-INDENT: 35.4pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt; &lt;span style="COLOR: teal"&gt;DesignerActionListCollection&lt;/span&gt;();&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;collection.Add(&lt;span style="COLOR: blue"&gt;new&lt;/span&gt; &lt;span style="COLOR: teal"&gt;RatingActionList&lt;/span&gt;((&lt;span style="COLOR: teal"&gt;RatingControl&lt;/span&gt;) &lt;span style="COLOR: blue"&gt;this&lt;/span&gt;.Control));&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'"&gt;return&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt; collection;&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt 18pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;font face="Calibri"&gt;Nun kommt zum Schluss mal wieder ein Attribut, diesmal das &lt;strong&gt;&lt;span style="COLOR: teal"&gt;DesignerAttribut&lt;/span&gt;&lt;/strong&gt;, das wir mit dem &lt;strong&gt;&lt;span style="COLOR: teal"&gt;RatingControlDesigner&lt;/span&gt;&lt;/strong&gt; als Argument zur &lt;strong&gt;&lt;span style="COLOR: teal"&gt;RatingControl&lt;/span&gt;&lt;/strong&gt; Klasse hinzufügen:&lt;/font&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;[&lt;span style="COLOR: teal"&gt;Designer&lt;/span&gt;(&lt;span style="COLOR: blue"&gt;typeof&lt;/span&gt;(&lt;span style="COLOR: teal"&gt;RatingControlDesigner&lt;/span&gt;))]&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'"&gt;public&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt; &lt;span style="COLOR: blue"&gt;partial&lt;/span&gt; &lt;span style="COLOR: blue"&gt;class&lt;/span&gt; &lt;span style="COLOR: teal"&gt;RatingControl&lt;/span&gt; : &lt;span style="COLOR: teal"&gt;UserControl&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;{ &lt;span style="COLOR: green"&gt;/* ... */ &lt;/span&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;font face="Calibri"&gt;Nach dieser langen Durststrecke ohne Bilder können wir nun endlich die Smart Tag Panel unseres Steuerelementes in Abbildung 12 sehen.&lt;/font&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt 18pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt 18pt"&gt; &lt;img height="113" alt="" width="341" src="/images/blogs_escde_net/sebastian/ImagesDesignTimeFunktionalitt/012.PNG" /&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt 18pt"&gt;&lt;font face="Calibri"&gt;&lt;strong&gt;Abbildung 12&lt;/strong&gt; – das &lt;strong&gt;&lt;span style="COLOR: teal"&gt;RatingControl&lt;/span&gt;&lt;/strong&gt; mit Smart Tag Panele&lt;/font&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt 18pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="TEXT-JUSTIFY: inter-ideograph; MARGIN: 12pt 0cm 6pt; TEXT-ALIGN: justify"&gt;&lt;strong&gt;&lt;font size="6"&gt;&lt;a name="_Toc143075454"&gt;&lt;font face="Calibri" color="#17365d" size="5"&gt;Optimierungen&lt;/font&gt;&lt;/a&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;font face="Calibri"&gt;Nutzt man das Steuerelement auf einer &lt;strong&gt;&lt;span style="COLOR: teal"&gt;Form&lt;/span&gt;&lt;/strong&gt; in Visual Studio und schaut sich die vom Visual Studio Designer generierte &lt;strong&gt;&lt;em&gt;InitializeComponent&lt;/em&gt;&lt;/strong&gt; Methode an, so stellt man fest, dass Visual Studio jeder neuen Eigenschaft unseres Steuerelementes ein Wert zuweist, selbst wenn wir den Wert dieser Eigenschaft nicht im Eigenschaften Fenster verändert haben:&lt;/font&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: green; FONT-FAMILY: 'Courier New'"&gt;// …&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'"&gt;this&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;.ratingControl3.Name = &lt;span style="COLOR: maroon"&gt;"ratingControl3"&lt;/span&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;rating3.Maximum = 5;&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;rating3.RatingImage = ((System.Drawing.&lt;span style="COLOR: teal"&gt;Image&lt;/span&gt;)&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt 141.6pt; TEXT-INDENT: 35.4pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;(resources.GetObject(&lt;span style="COLOR: maroon"&gt;"rating3.RatingImage"&lt;/span&gt;)));&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;rating3.RatingValue = 0;&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'"&gt;this&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;.ratingControl3.Rating = rating3;&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: green; FONT-FAMILY: 'Courier New'"&gt;// …&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;font face="Calibri"&gt;Wie man sehen kann sind das alles die Werte, die wir im Konstruktor bzw. bei der Initialisierung der &lt;strong&gt;&lt;span style="COLOR: teal"&gt;Rating&lt;/span&gt;&lt;/strong&gt; Klasse bereits festgelegt haben. Dadurch dass Visual Studio dennoch den Eigenschaften diese Werte nochmals zuweist, werden Ressourcen verschwendet und die Performance kann darunter leiden, da meistens innerhalb des Steuerelementes hierdurch einige Methoden ausgeführt werden, die entsprechend der Werte das Steuerelement neu konfigurieren. Um Visual Studio nun zu informieren, wann es den Wert der Eigenschaft neu festzulegen hat und wann nicht, bedient man sich des &lt;strong&gt;&lt;span style="COLOR: teal"&gt;DefaultValue&lt;/span&gt;&lt;/strong&gt; Attributes für die Eigenschaften:&lt;/font&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;[&lt;span style="COLOR: teal"&gt;DefaultValue&lt;/span&gt;(5)]&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'"&gt;public&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt; &lt;span style="COLOR: blue"&gt;int&lt;/span&gt; Maximum&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;{&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt; TEXT-INDENT: 35.4pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: green; FONT-FAMILY: 'Courier New'"&gt;// …&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'"&gt;        &lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;font face="Calibri"&gt;Solange der Wert von &lt;strong&gt;&lt;em&gt;Maximum&lt;/em&gt;&lt;/strong&gt; nun 5 ist, wird Visual Studio in der &lt;strong&gt;&lt;em&gt;InitializeComponent&lt;/em&gt;&lt;/strong&gt; Methode keine Quellcodezeile dafür anlegen um der Eigenschaft einen Wert zuzuweisen. Der einzige Nachteil dieses Attributes ist, dass man damit nur konstante Ausdrücke festlegen kann, also es nicht im Zusammenhang mit Objekten (Referenztypen) nutzen kann. Jedoch gibt es auch hierfür eine Lösung: man fügt der Klasse eine &lt;strong&gt;&lt;em&gt;ShouldSerializeXXX&lt;/em&gt;&lt;/strong&gt; Methode hinzu, wobei XXX der Name der Eigenschaft ist. Wir brauchen das hier für unsere &lt;strong&gt;&lt;em&gt;RatingImage&lt;/em&gt;&lt;/strong&gt; Eigenschaft:&lt;/font&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'"&gt;private&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt; &lt;span style="COLOR: blue"&gt;bool&lt;/span&gt; ShouldSerializeRatingImage()&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;{&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt; TEXT-INDENT: 35.4pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'"&gt;return&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt; !(&lt;span style="COLOR: teal"&gt;Rating&lt;/span&gt;.starImage.Equals(&lt;span style="COLOR: blue"&gt;this&lt;/span&gt;.ratingImage));&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;font face="Calibri"&gt;Innerhalb dieser Methode gibt man nun zurück, ob Visual Studio eine Quellcodezeile zum festlegen eines Wertes für diese Eigenschaft erstellen soll. Normalerweise gibt man also false  zurück wenn die Eigenschaft den initialisierten Wert (also Standardwert) aufweist (hier das Standardbild - der Stern), ansonsten true. Im Übrigen wird der Wert der Eigenschaft von Visual Studio verändert, &lt;strong&gt;bevor&lt;/strong&gt; die &lt;strong&gt;&lt;em&gt;ShouldSerializeXXX&lt;/em&gt;&lt;/strong&gt; Methode aufgerufen wird.&lt;/font&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;font face="Calibri"&gt;Zusätzlich kann man eine &lt;strong&gt;&lt;em&gt;ResetXXX&lt;/em&gt;&lt;/strong&gt; Methode hinzufügen, womit der Nutzer im Eigenschaften Fenster mittels Menü die entsprechende Eigenschaft wieder auf ihren Standardwert zurücksetzen kann:&lt;/font&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'"&gt;private&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt; &lt;span style="COLOR: blue"&gt;void&lt;/span&gt; ResetRatingImage()&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;{&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt; TEXT-INDENT: 35.4pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'"&gt;this&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;.RatingImage = &lt;span style="COLOR: teal"&gt;Rating&lt;/span&gt;.starImage;&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;font face="Calibri"&gt;Diese Funktionalität können sie in Abbildung 13 sehen. Wenn sie das &lt;strong&gt;&lt;span style="COLOR: teal"&gt;DefaultValue&lt;/span&gt;&lt;/strong&gt; Attribut verwenden, wird diese Funktionalität automatisch bereitsgestellt.&lt;/font&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;img height="95" alt="" width="406" src="/images/blogs_escde_net/sebastian/ImagesDesignTimeFunktionalitt/013.PNG" /&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;font face="Calibri"&gt;&lt;strong&gt;Abbildung 13&lt;/strong&gt; – Menü zum Zurücksetzen einer Eigenschaften (erreichbar über &lt;/font&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt 35.4pt; TEXT-INDENT: 35.4pt"&gt;&lt;font face="Calibri"&gt; die rechte Maustaste) zum Standardwert&lt;/font&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;font face="Calibri"&gt;Ein weiterer Weg um die Initialisierung des Steuerelementes durch Visual Studio zu verbessern ist die Verwendung des &lt;strong&gt;&lt;span style="COLOR: teal"&gt;ISupportInitialize&lt;/span&gt;&lt;/strong&gt; Interfaces in unserem Steuerelement:&lt;/font&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'"&gt;public&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt; &lt;span style="COLOR: blue"&gt;partial&lt;/span&gt; &lt;span style="COLOR: blue"&gt;class&lt;/span&gt; &lt;span style="COLOR: teal"&gt;RatingControl&lt;/span&gt; : &lt;span style="COLOR: teal"&gt;UserControl&lt;/span&gt;, &lt;span style="COLOR: teal"&gt;ISupportInitialize&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;{ &lt;span style="COLOR: green"&gt;/* ... */ &lt;/span&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;font face="Calibri"&gt;Dieses Interface verfügt über zwei Methoden, die wir in unserer Klasse implementieren müssen. Zum einen ist das die &lt;strong&gt;&lt;em&gt;BeginInit&lt;/em&gt;&lt;/strong&gt; Methode, die zum Beginn des Initialisierungsvorganges von Visual Studio aufgerufen wird. In dieser Methode setzt man am besten die interne Infrastruktur (hier die &lt;strong&gt;&lt;em&gt;RatingConfigChanged&lt;/em&gt;&lt;/strong&gt; Methode) des Steuerelementes mithilfe eines bool Feldes außer Kraft:&lt;/font&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'"&gt;private&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt; &lt;span style="COLOR: blue"&gt;bool&lt;/span&gt; currentlyInitializing = &lt;span style="COLOR: blue"&gt;false&lt;/span&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'"&gt;public&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt; &lt;span style="COLOR: blue"&gt;void&lt;/span&gt; BeginInit()&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;{&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt; TEXT-INDENT: 35.4pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;currentlyInitializing = &lt;span style="COLOR: blue"&gt;true&lt;/span&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'"&gt;private&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt; &lt;span style="COLOR: blue"&gt;void&lt;/span&gt; RatingConfigChanged(&lt;span style="COLOR: blue"&gt;object&lt;/span&gt; sender, &lt;span style="COLOR: teal"&gt;EventArgs&lt;/span&gt; e)&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;{&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt; TEXT-INDENT: 35.4pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'"&gt;if&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt; (currentlyInitializing)&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt; TEXT-INDENT: 35.4pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'"&gt;return&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;            &lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;      &lt;span style="COLOR: green"&gt;//...&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;font face="Calibri"&gt;Dadurch wird verhindert, dass diese Methoden zur Aktualisierung des Steuerelementes bei jeder einzelnen Veränderung einer Eigenschaft während der Initialisierung aufgerufen werden. Nachdem die Werte aller Eigenschaften entsprechend konfiguriert sind, ruft Visual Studio die zweite Methode des Interfaces, die &lt;strong&gt;&lt;em&gt;EndInit&lt;/em&gt;&lt;/strong&gt; Methode auf. Hier setzen wir unsere bool Variable zurück auf false und rufen entsprechende Methoden auf um das Steuerelement zu aktualisieren:&lt;/font&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'"&gt;public&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt; &lt;span style="COLOR: blue"&gt;void&lt;/span&gt; EndInit()&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;{&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt; TEXT-INDENT: 35.4pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'"&gt;this&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;.currentlyInitializing = &lt;span style="COLOR: blue"&gt;false&lt;/span&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;      &lt;span style="COLOR: blue"&gt;this&lt;/span&gt;.RatingConfigChanged(&lt;span style="COLOR: blue"&gt;null&lt;/span&gt;, &lt;span style="COLOR: blue"&gt;null&lt;/span&gt;);      &lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;font face="Calibri"&gt;Wenn man jetzt das Projekt neu kompiliert und sich erneut die &lt;strong&gt;&lt;em&gt;InitializeComponent&lt;/em&gt;&lt;/strong&gt; Methode der Form des Steuerelementes anschaut, kann man sehen, dass Visual Studio jetzt Gebrauch macht vom &lt;strong&gt;&lt;span style="COLOR: teal"&gt;ISupportInitialize&lt;/span&gt;&lt;/strong&gt; Interface:&lt;/font&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'"&gt;private&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt; &lt;span style="COLOR: blue"&gt;void&lt;/span&gt; InitializeComponent()&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;{&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;      &lt;span style="COLOR: green"&gt;//...&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt 35.4pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;((System.ComponentModel.&lt;span style="COLOR: teal"&gt;ISupportInitialize&lt;/span&gt;)(&lt;span style="COLOR: blue"&gt;this&lt;/span&gt;.ratingControl1))&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt 354pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;.BeginInit();&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt; TEXT-INDENT: 35.4pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: green; FONT-FAMILY: 'Courier New'"&gt;//werte von ratingControl1 werden hier festgelegt...&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;            &lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt 35.4pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;            ((System.ComponentModel.&lt;span style="COLOR: teal"&gt;ISupportInitialize&lt;/span&gt;)(&lt;span style="COLOR: blue"&gt;this&lt;/span&gt;.ratingControl1))&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt 354pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;.EndInit();&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt; TEXT-INDENT: 35.4pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: green; FONT-FAMILY: 'Courier New'"&gt;//...&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt; &lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;font face="Calibri"&gt;Ferner ist das &lt;strong&gt;&lt;span style="COLOR: teal"&gt;ISupportInitialize&lt;/span&gt;&lt;/strong&gt; Interface auch gut dafür geeignet mithilfe dessen Methoden evtl. vorhandene Überprüfungsmachanismen für Eigenschaften (hier z.B. dass &lt;strong&gt;&lt;em&gt;RatingValue&lt;/em&gt;&lt;/strong&gt; nicht größer sein darf als &lt;strong&gt;&lt;em&gt;Maximum&lt;/em&gt;&lt;/strong&gt;) temporär zu deaktivieren, um zu verhindern, dass diese Exceptions verursachen wenn sie in der falschen Reihenfolge von Visual Studio initialisiert werden. Das ist hier nicht der Fall, da Visual Studio die Eigenschaften entsprechend der Reihenfolge ihrer Anfangsbuchstaben initialisiert, und günstigerweise kommt M (&lt;strong&gt;&lt;em&gt;Maximum&lt;/em&gt;&lt;/strong&gt;) vor R (&lt;strong&gt;&lt;em&gt;RatingValue&lt;/em&gt;&lt;/strong&gt;).&lt;/font&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;font face="Calibri"&gt;Vielleicht haben Sie es bereits gemerkt: wenn man die &lt;strong&gt;&lt;em&gt;Maximum&lt;/em&gt;&lt;/strong&gt; Eigenschaft des Steuerelementes verändert (wodurch sich dann auch die Größe des Steuerelementes ändert), aktualisiert der Visual Studio Designer nicht sofort die Markierung um das Steuerelement, wie man in Abbildung 14 sehen kann.&lt;/font&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;img height="54" alt="" width="251" src="/images/blogs_escde_net/sebastian/ImagesDesignTimeFunktionalitt/014.PNG" /&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;font face="Calibri"&gt;&lt;strong&gt;Abbildung 14&lt;/strong&gt; – Markierung des Steuerelementes wird sofort aktualisiert&lt;/font&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;font face="Calibri"&gt;Man kann eine sofortige Aktualisierung erreichen, indem man das &lt;strong&gt;&lt;span style="COLOR: teal"&gt;RefreshPropertiesAttribute&lt;/span&gt;&lt;/strong&gt; für die entsprechende Eigenschaft verwendet:&lt;/font&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;[&lt;span style="COLOR: teal"&gt;RefreshProperties&lt;/span&gt;( &lt;span style="COLOR: teal"&gt;RefreshProperties&lt;/span&gt;.All)]&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: #999999; FONT-FAMILY: 'Courier New'"&gt;[DefaultValue(5)]&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'"&gt;public&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt; &lt;span style="COLOR: blue"&gt;int&lt;/span&gt; Maximum&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;{ &lt;span style="COLOR: green"&gt;/* ... */ &lt;/span&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;font face="Calibri"&gt;Als Argument dafür kann man zwischen RefreshProperties.All (alles wird aktualisiert), RefreshProperties.Repaint (das Steuerelement wird neu gezeichnet) und RefreshProperties.None (nichts wird aktualisiert) wählen.&lt;/font&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;font face="Calibri"&gt;Jetzt wird die Markierung des Steuerelementes auch sofort aktualisiert, wenn man den &lt;strong&gt;&lt;em&gt;Maximum&lt;/em&gt;&lt;/strong&gt; Wert ändert. In diesem Beispiel war es nur die Markierung, bei anderen Steuerelementen hingegen kann dieses Attribut wichtiger sein, z.B. damit das Steuerelement entsprechend der Veränderungen die vorgenommen wurden richtig gezeichnet wird.&lt;/font&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="TEXT-JUSTIFY: inter-ideograph; MARGIN: 12pt 0cm 6pt; TEXT-ALIGN: justify"&gt;&lt;strong&gt;&lt;font size="6"&gt;&lt;a name="_Toc143075455"&gt;&lt;font face="Calibri" color="#17365d" size="5"&gt;Attribute, Attribute und nochmals Attribute&lt;/font&gt;&lt;/a&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;font face="Calibri"&gt;Wie praktisch Attribute sein können, haben wir ja schon häufig genug im Verlaufe dieses White Paper gesehen. In der Tat gibt es noch viele andere Attribute die nützlich sind für die Entwurfszeit, u. a. das &lt;strong&gt;&lt;span style="COLOR: teal"&gt;Description&lt;/span&gt;&lt;/strong&gt; Attribut. Damit kann man Eigenschaften und Events eine Beschreibung zuordnen:&lt;/font&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;[&lt;span style="COLOR: teal"&gt;Description&lt;/span&gt;(&lt;span style="COLOR: maroon"&gt;"Image used to display RatingValue"&lt;/span&gt;)]&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'"&gt;public&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt; &lt;span style="COLOR: teal"&gt;Image&lt;/span&gt; RatingImage&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;{&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt; TEXT-INDENT: 35.4pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: green; FONT-FAMILY: 'Courier New'"&gt;//...&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt; &lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;} &lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;font face="Calibri"&gt;Diese Beschreibung wird dann im Eigenschaften Fenster angezeigt, wie man in Abbildung 15 sehen kann.&lt;/font&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;img height="132" alt="" width="296" src="/images/blogs_escde_net/sebastian/ImagesDesignTimeFunktionalitt/015.PNG" /&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;font face="Calibri"&gt; &lt;strong&gt;Abbildung 15&lt;/strong&gt; – Beschreibung der &lt;strong&gt;&lt;em&gt;RatingImage&lt;/em&gt;&lt;/strong&gt; Eigenschaft im Eigenschaften &lt;/font&gt;&lt;font face="Calibri"&gt;&lt;span&gt;Fenster&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;font face="Calibri"&gt;Zusätzlich gibt es zudem das &lt;strong&gt;&lt;span style="COLOR: teal"&gt;Category&lt;/span&gt;&lt;/strong&gt; Attribut, mit dem man eine Eigenschaft (hier die &lt;strong&gt;&lt;em&gt;Rating&lt;/em&gt;&lt;/strong&gt; Eigenschaft des Steuerelementes) einer Kategorie zuordnen kann:&lt;/font&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;[&lt;span style="COLOR: teal"&gt;Category&lt;/span&gt;(&lt;span style="COLOR: maroon"&gt;"Look and Feel"&lt;/span&gt;)]&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'"&gt;public&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt; &lt;span style="COLOR: teal"&gt;Rating&lt;/span&gt; Rating&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;{ &lt;span style="COLOR: green"&gt;/* ... */ &lt;/span&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;font face="Calibri"&gt;Entsprechend wird dann die Eigenschaft im Eigenschaften Fenster unter dieser Kategorie angezeigt (Abbildung 16).&lt;/font&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;img height="80" alt="" width="399" src="/images/blogs_escde_net/sebastian/ImagesDesignTimeFunktionalitt/016.PNG" /&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;font face="Calibri"&gt; &lt;strong&gt;Abbildung 16&lt;/strong&gt; – &lt;strong&gt;&lt;em&gt;Rating&lt;/em&gt;&lt;/strong&gt; Eigenschaft unter der Look and Feel Kategorie&lt;/font&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;font face="Calibri"&gt;Ein weiteres nützliches Attribut ist das &lt;strong&gt;&lt;span style="COLOR: teal"&gt;DefaultEvent&lt;/span&gt;&lt;/strong&gt; Attribut. Dieses Attribut wird auf das Steuerelement angewendet, mit dem Namen des Standard - Events des Steuerelementes als Argument:&lt;/font&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;[&lt;span style="COLOR: teal"&gt;DefaultEvent&lt;/span&gt;(&lt;span style="COLOR: maroon"&gt;"ValueChanged"&lt;/span&gt;)]&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: #999999; FONT-FAMILY: 'Courier New'"&gt;[Designer(typeof(RatingControlDesigner))]&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'"&gt;public&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt; &lt;span style="COLOR: blue"&gt;partial&lt;/span&gt; &lt;span style="COLOR: blue"&gt;class&lt;/span&gt; &lt;span style="COLOR: teal"&gt;RatingControl&lt;/span&gt; : &lt;span style="COLOR: teal"&gt;UserControl&lt;/span&gt;, &lt;span style="COLOR: teal"&gt;ISupportInitialize&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;{ &lt;span style="COLOR: green"&gt;/* ... */ &lt;/span&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;font face="Calibri"&gt;Dadurch wird das Event bestimmt, welchem bei Doppelklick auf das Steuerelement zur Laufzeit der passende Delegat hinzugefügt wird. Visual Studio erzeugt dann automatisch eine Methode für diesen Delegaten und sie landen in der Code View in dieser Methode (wie z.B. beim Doppelklick auf ein &lt;strong&gt;&lt;span style="COLOR: teal"&gt;Button&lt;/span&gt;&lt;/strong&gt; Steuerelement in der entsprechend erzeugten &lt;strong&gt;&lt;em&gt;xxxClick&lt;/em&gt;&lt;/strong&gt; Methode).&lt;/font&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;font face="Calibri"&gt;Entsprechend gibt es auch ein &lt;strong&gt;&lt;span style="COLOR: teal"&gt;DefaultProperty&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;   &lt;/span&gt;&lt;/strong&gt; Attribut: &lt;/font&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;[&lt;span style="COLOR: teal"&gt;DefaultProperty&lt;/span&gt;(&lt;span style="COLOR: maroon"&gt;"Rating"&lt;/span&gt;)]&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: #999999; FONT-FAMILY: 'Courier New'"&gt;[DefaultEvent("ValueChanged")]&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: #999999; FONT-FAMILY: 'Courier New'"&gt;[Designer(typeof(RatingControlDesigner))]&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'"&gt;public&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt; &lt;span style="COLOR: blue"&gt;partial&lt;/span&gt; &lt;span style="COLOR: blue"&gt;class&lt;/span&gt; &lt;span style="COLOR: teal"&gt;RatingControl&lt;/span&gt; : &lt;span style="COLOR: teal"&gt;UserControl&lt;/span&gt;, &lt;span style="COLOR: teal"&gt;ISupportInitialize&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;{ &lt;span style="COLOR: green"&gt;/* ... */ &lt;/span&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;font face="Calibri"&gt;Dieses Attribut bestimmt welche Eigenschaft des Steuerelements im Eigenschaften Fenster markiert ist (hier die &lt;strong&gt;&lt;em&gt;Rating&lt;/em&gt;&lt;/strong&gt; Eigenschaft) wenn sie eine neue Instanz des Steuerelementes zur &lt;strong&gt;&lt;span style="COLOR: teal"&gt;Form&lt;/span&gt;&lt;/strong&gt; hinzufügen (Abbildung 17).&lt;/font&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;img height="70" alt="" width="409" src="/images/blogs_escde_net/sebastian/ImagesDesignTimeFunktionalitt/017.PNG" /&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;font face="Calibri"&gt;&lt;strong&gt; Abbildung 17&lt;/strong&gt; – &lt;strong&gt;&lt;em&gt;Rating&lt;/em&gt;&lt;/strong&gt; Eigenschaft ist markiert im Eigenschaften Fenster&lt;/font&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;font face="Calibri"&gt; &lt;/font&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;font face="Calibri"&gt;Andere nützliche Attribute umfassen das &lt;strong&gt;&lt;span style="COLOR: teal"&gt;Browsable&lt;/span&gt;&lt;/strong&gt; Attribut, das mittels eines boolschen Arguments bestimmt, ob eine Eigenschaft oder ein Event eines Steuerelements im Eigenschaften Fenster angezeigt wird, z.B. so:&lt;/font&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;[&lt;span style="COLOR: teal"&gt;Browsable&lt;/span&gt;(&lt;span style="COLOR: blue"&gt;false&lt;/span&gt;)]&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'"&gt;public&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt; &lt;span style="COLOR: blue"&gt;int&lt;/span&gt; RatingValue&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;{ &lt;span style="COLOR: green"&gt;/* ... &lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: green; FONT-FAMILY: 'Courier New'"&gt;*/ &lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;font face="Calibri"&gt;Das Beispiel oben macht natürlich für unser Steuerelement hier keinen Sinn.&lt;/font&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;font face="Calibri"&gt;Ferner gibt es das &lt;strong&gt;&lt;span style="COLOR: teal"&gt;Localizable&lt;/span&gt;&lt;/strong&gt; Attribut für Eigenschaften. Dieses legt fest, ob bei Lokalisierung der Wert der Eigenschaft von Visual Studio in Resourcen Dateien entsprechend ausgelagert werden soll (z.B. kann das bei einer &lt;strong&gt;&lt;em&gt;Text&lt;/em&gt;&lt;/strong&gt; Eigenschaft Sinn machen). Die Anwendung des Attributes könnte so aussehen:&lt;/font&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;[&lt;span style="COLOR: teal"&gt;Localizable&lt;/span&gt;(&lt;span style="COLOR: blue"&gt;true&lt;/span&gt;)]&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'"&gt;public&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt; &lt;span style="COLOR: blue"&gt;int&lt;/span&gt; Maximum&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;{ &lt;span style="COLOR: green"&gt;/* ... &lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: green; FONT-FAMILY: 'Courier New'"&gt;*/ &lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;font face="Calibri"&gt;Auch das macht bei unserem Steuerelement hier keinen Sinn. Dennoch ist das &lt;strong&gt;&lt;span style="COLOR: teal"&gt;Localizable&lt;/span&gt;&lt;/strong&gt; Attribut im Allgemeinen aber definitiv ein sehr nützliches Hilfsmittel.&lt;/font&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;font face="Calibri"&gt;Zusätzlich gibt es es noch das &lt;strong&gt;&lt;span style="COLOR: teal"&gt;DesignerSerializationVisibility&lt;/span&gt;&lt;/strong&gt; Attribut, mit dem komplett kontrolliert werden kann, wie und ob der Wert einer Eigenschaft eines Steuerelementes von Visual Studio entsprechend als Quellcodezeile in die &lt;strong&gt;&lt;em&gt;InitializeComponent&lt;/em&gt;&lt;/strong&gt; Methode serialisiert wird. Dieses Attribut kann verwendet werden, um noch mehr Kontrolle über den Code - Serialisierungsvorgang von Visual Studio zu erreichen - mehr als mittels &lt;strong&gt;&lt;span style="COLOR: teal"&gt;DefaultValue&lt;/span&gt;&lt;/strong&gt; Attribut und der &lt;strong&gt;&lt;em&gt;ShouldSerializeXXX&lt;/em&gt;&lt;/strong&gt; Methode, die bereits im 5. Abschnitt „Optimierungen“ beschrieben wurden. Für dieses Attribut gibt es 3 mögliche Argumente:   DesignerSerializationVisibility.Hidden gibt an, dass von Visual Studio keine Quellcodezeile in der &lt;strong&gt;&lt;em&gt;InitializeComponent&lt;/em&gt;&lt;/strong&gt; Methode für die Eigenschaft erzeugt wird, um den Wert entsprechend zuzuweisen. DesignerSerializationVisibility.Visible gibt an, dass eine Quellcodezeile erzeugt wird. DesignerSerializationVisibility.Content gibt an, dass Visual Studio Code für den Inhalt des Objektes der Eigenschaft erzeugt, anstatt für das Objekt selbst. Die Anwendung des Attributes könnte dann z.B. so aussehen:&lt;/font&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;[&lt;span style="COLOR: teal"&gt;DesignerSerializationVisibility&lt;/span&gt;(&lt;span style="COLOR: teal"&gt;DesignerSerializationVisibility&lt;/span&gt;.Content)]&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: #999999; FONT-FAMILY: 'Courier New'"&gt;[Category("Look and Feel")]     &lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'"&gt;public&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt; &lt;span style="COLOR: teal"&gt;Rating&lt;/span&gt; Rating&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;{ &lt;span style="COLOR: green"&gt;/* ... &lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: green; FONT-FAMILY: 'Courier New'"&gt;*/ &lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;div style="TEXT-JUSTIFY: inter-ideograph; MARGIN: 12pt 0cm 6pt; TEXT-ALIGN: justify"&gt;&lt;strong&gt;&lt;font size="6"&gt;&lt;a name="_Toc143075456"&gt;&lt;font face="Calibri" color="#17365d" size="5"&gt;Zusammenfassung&lt;/font&gt;&lt;/a&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt; &lt;/div&gt;
&lt;p&gt;&lt;span style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'"&gt;In diesem White Paper wurde einiges an Möglichkeiten beschrieben, um Steuerelementen nützliche Unterstützung für die Entwurfszeit hinzuzufügen. Je nach Umfang und Art des Steuerelementes kann die eine oder andere Art von Entwurfszeit – Funktionalität nützlich sein. Je umfangreicher die Steuerelemente aufgebaut sind, desto zeitintensiver wird dessen Konfiguration – ein Umstand den eine sinnvolle Unterstützung für die Entwurfszeit deutlich abmildern kann. Das Beispielprojekt dieses Blog Eintrages finden Sie unter: &lt;a href="http://blogs.escde.net/images/blogs_escde_net/sebastian/RatingControl.zip"&gt;RatingControlProjekt&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;img src="http://blogs.escde.net/sebastian/aggbug/75.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Sebastian</dc:creator>
            <guid>http://blogs.escde.net/sebastian/archive/2007/04/16/75.aspx</guid>
            <pubDate>Mon, 16 Apr 2007 11:18:03 GMT</pubDate>
            <wfw:comment>http://blogs.escde.net/sebastian/comments/75.aspx</wfw:comment>
            <comments>http://blogs.escde.net/sebastian/archive/2007/04/16/75.aspx#feedback</comments>
            <wfw:commentRss>http://blogs.escde.net/sebastian/comments/commentRss/75.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.escde.net/sebastian/services/trackbacks/75.aspx</trackback:ping>
        </item>
        <item>
            <title>Erweiterungen in C# 3.0</title>
            <link>http://blogs.escde.net/sebastian/archive/2007/04/16/74.aspx</link>
            <description>Unter folgendem Link finden Sie diesen Blog Eintrag als Word Dokument: &lt;a href="http://blogs.escde.net/images/blogs_escde_net/sebastian/CSharp3_0_Whitepaper.doc"&gt;CSharp3Whitepaper&lt;/a&gt;
&lt;h1 style="margin: 24pt 0cm 6pt 21.55pt; page-break-before: always; text-indent: -21.55pt; text-align: justify;"&gt;&lt;a name="_Toc151571267"&gt;&lt;/a&gt;&lt;a name="_Toc150596750"&gt;&lt;span style=""&gt;Einleitung&lt;/span&gt;&lt;/a&gt;&lt;/h1&gt;
&lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;Dieses Whitepaper beschäftigt sich mit den Erweiterungen und Veränderungen von C# 3.0. C# 3.0 wird mit dem .NET Framework 3.5 (zusammen mit Visual Studio Codename Orcas) voraussichtlich Mitte 2007 erscheinen. Beachten Sie, dass C# 3.0 &lt;u&gt;nicht&lt;/u&gt; Teil des .NET Framework 3.0 ist. Es mag von den Versionsnummern her etwas verwirrend sein, aber das .NET Framework 3.0 enthält weder Compilerupdates noch eine veränderte CLR, sondern nur neue Bibliotheken und wurde aus rein Marktstrategischen Gründen seitens Microsoft von WinFX in .NET 3.0 umbenannt. Die Erweiterungen in C# 3.0 reichen von kleinen Veränderungen wie z.B. implizit typisierten lokalen Variablen bis hin zu ziemlich neuen Funktionen wie z.B. Erweiterungsmethoden. Sogar revolutionäre Neuerungen wie etwa die normalerweise aus der Datenbank -Welt bekannten Query Expressions sind in C# 3.0 zu finden (diese werden als LINQ bezeichnet).&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="color: red;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="color: red;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h1 style="margin: 24pt 0cm 6pt 21.55pt; page-break-before: always; text-indent: -21.55pt; text-align: justify;"&gt;&lt;a name="_Toc151571268"&gt;&lt;/a&gt;&lt;a name="_Toc150596751"&gt;&lt;span style=""&gt;Implizit typisierte lokale Variablen&lt;/span&gt;&lt;/a&gt;&lt;/h1&gt;
&lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;In C# 3.0 kann der Datentyp lokaler Variablen bei der Deklaration vom Compiler automatisch, also ohne dass explizit der Typ angegeben wird, bestimmt werden. Dafür wird das neue Schlüsselwort&lt;span style="font-size: 10pt; color: blue; font-family: 'Courier New';"&gt; var&lt;/span&gt; verwendet. Ein Beispiel:&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: 10pt; color: blue; font-family: 'Courier New';"&gt;var&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt; deepThought = 42;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;Der Compiler wertet hier dann die Initialisierung der Variable &lt;em style=""&gt;deepThought&lt;/em&gt; aus, und legt aufgrund des Wertes 42 den Typ von &lt;em style=""&gt;deepThought&lt;/em&gt; auf Integer fest. Dies bedeutet, dass die obige Zeile &lt;u&gt;semantisch&lt;/u&gt; identisch mit folgendem ist: &lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; color: blue; font-family: 'Courier New';"&gt;int&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt; deepThought = 42;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span style=""&gt;Der Datentyp wird einmalig bei der ersten Deklaration der Variablen vom Compiler festgelegt, und kann danach nicht mehr verändert werden:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; color: blue; font-family: 'Courier New';"&gt;var&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt; i = 5; &lt;span style="color: green;"&gt;// i wird vom Compiler als Integer festgelegt&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; color: green; font-family: 'Courier New';"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;i = 25.2;&lt;span style=""&gt;  &lt;/span&gt;&lt;span style="color: green;"&gt;//Fehler, da i Integer ist, und kein Double&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span style=""&gt;Damit der Compiler den Typ der Variable feststellen kann, muss eine mit dem Schlüsselwort &lt;/span&gt;&lt;span style="font-size: 10pt; color: blue; font-family: 'Courier New';"&gt;var&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt; &lt;/span&gt;&lt;span style=""&gt;deklarierte Variable unbedingt bei der Deklaration schon initialisiert werden, da aus der Intitialisierung der Datentyp der Variable vom Compiler abgeleitet wird. Daraus ergibt sich auch, dass eine Initialisierung mit&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt; &lt;span style="color: blue;"&gt;null&lt;/span&gt; &lt;/span&gt;&lt;span style=""&gt;in diesem Zusammenhang nicht zulässig ist. Weitere Beispiele sind:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; color: blue; font-family: 'Courier New';"&gt;var&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt; fehler&lt;span style=""&gt;   &lt;/span&gt;= &lt;span style="color: blue;"&gt;null&lt;/span&gt;;&lt;span style=""&gt;           &lt;/span&gt;&lt;span style=""&gt;    &lt;/span&gt;&lt;span style=""&gt;  &lt;/span&gt;&lt;span style="color: green;"&gt;//Fehler -&amp;gt; ist nicht erlaubt&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; color: blue; font-family: 'Courier New';"&gt;var&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt; fehler2;&lt;span style=""&gt;                         &lt;/span&gt;&lt;span style="color: green;"&gt;//Fehler -&amp;gt; Initialiserung fehlt&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;span style=""&gt;      &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-size: 10pt; color: blue; font-family: 'Courier New';"&gt;var&lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 10pt; font-family: 'Courier New';"&gt; liste&lt;span style=""&gt;    &lt;/span&gt;= &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: teal;"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="color: blue;"&gt;int&lt;/span&gt;&amp;gt;();&lt;span style=""&gt;      &lt;/span&gt;&lt;span style="color: green;"&gt;//Typ: List&amp;lt;int&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; color: blue; font-family: 'Courier New';"&gt;var&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt; text&lt;span style=""&gt;     &lt;/span&gt;= &lt;span style="color: maroon;"&gt;"Das ist ein Text"&lt;/span&gt;;&lt;span style=""&gt;   &lt;/span&gt;&lt;span style="color: green;"&gt;//Typ : String&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-size: 10pt; color: blue; font-family: 'Courier New';"&gt;var&lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 10pt; font-family: 'Courier New';"&gt; pi&lt;span style=""&gt;       &lt;/span&gt;= 3.1415;&lt;span style=""&gt;           &lt;/span&gt;&lt;span style=""&gt;    &lt;/span&gt;&lt;span style="color: green;"&gt;//Typ double&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-size: 10pt; color: blue; font-family: 'Courier New';"&gt;var&lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 10pt; font-family: 'Courier New';"&gt; arrayVar = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: blue;"&gt;int&lt;/span&gt;[42];&lt;span style=""&gt;    &lt;/span&gt;&lt;span style=""&gt;      &lt;/span&gt;&lt;span style="color: green;"&gt;//Typ: int[]&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-size: 10pt; color: blue; font-family: 'Courier New';"&gt;foreach&lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 10pt; font-family: 'Courier New';"&gt; (&lt;span style="color: blue;"&gt;var&lt;/span&gt; myInt &lt;span style="color: blue;"&gt;in&lt;/span&gt; arrayVar)&lt;span style="color: green;"&gt; &lt;span style=""&gt;   &lt;/span&gt;&lt;span style=""&gt;  &lt;/span&gt;//Typ von myInt: int&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-indent: 35.4pt;" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; color: teal; font-family: 'Courier New';"&gt;Console&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;.WriteLine(myInt);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span style=""&gt;Auch diese Beispiele sind natürlich wieder semantisch äquivalent zur „herkömmlichen“ Deklaration wo der Datentyp explizit angegeben wird. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span style=""&gt;Wie man in späteren Kapiteln dieses Whitepapers noch sehen wird, erweist sich das &lt;/span&gt;&lt;span style="font-size: 10pt; color: blue; font-family: 'Courier New';"&gt;var&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt; &lt;/span&gt;&lt;span style=""&gt;Schlüsselwort vor allem für Anonyme Typen und Linq als notwendig bzw. praktisch.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h1 style="margin: 24pt 0cm 6pt 21.55pt; page-break-before: always; text-indent: -21.55pt; text-align: justify;"&gt;&lt;a name="_Toc151571269"&gt;&lt;/a&gt;&lt;a name="_Toc150596752"&gt;&lt;span style=""&gt;Erweiterungsmethoden&lt;/span&gt;&lt;/a&gt;&lt;/h1&gt;
&lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;Erweiterungsmethoden stellen eine interessante neue Möglichkeit dar, um Klassen oder auch Strukturen zu ergänzen. Dies umfasst auch Klassen und Strukturen, bei denen es bisher nicht möglich war, so z.B. Klassen die &lt;span style="font-size: 10pt; color: blue; font-family: 'Courier New';"&gt;sealed&lt;/span&gt; sind oder Strukturen wie System.Int32. Erweiterungsmethoden werden als statische Methode in einer neuen &lt;span style="font-size: 10pt; color: blue; font-family: 'Courier New';"&gt;static&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt; &lt;/span&gt;Klasse implementiert, und können dann wie eine normale Methode (d.h. Instanzmethode) des erweiterten Datentyps aufgerufen werden. Um eine Methode als Erweiterungsmethode zu deklarieren, wird vor dem ersten Parameter das Schlüsselwort &lt;span style="font-size: 10pt; color: blue; font-family: 'Courier New';"&gt;this&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt; &lt;/span&gt;angegeben. Ferner gibt der Argumenttyp des ersten Parameters die zu erweiternde Klasse bzw. Struktur an. Wenn die Erweiterungsmethode dann aufgerufen wird,&lt;span style=""&gt;  &lt;/span&gt;übergibt der Compiler die Instanz des erweiterten Typs als erstes Argument an die Methode. Erweiterungsmethoden können z.B. so aussehen:&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; color: blue; font-family: 'Courier New';"&gt;public&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt; &lt;span style="color: blue;"&gt;static&lt;/span&gt; &lt;span style="color: blue;"&gt;class&lt;/span&gt; &lt;span style="color: teal;"&gt;Extension&lt;/span&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;{&lt;span style=""&gt;     &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-indent: 35.4pt;" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; color: green; font-family: 'Courier New';"&gt;//Erweiterungsmethode für Int&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-indent: 35.4pt;" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; color: blue; font-family: 'Courier New';"&gt;public&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt; &lt;span style="color: blue;"&gt;static&lt;/span&gt; &lt;span style="color: blue;"&gt;int&lt;/span&gt; Betrag(&lt;span style="color: blue;"&gt;this&lt;/span&gt; &lt;span style="color: blue;"&gt;int&lt;/span&gt; instanz) &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;span style=""&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 10pt; font-family: 'Courier New';"&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;span style=""&gt;      &lt;/span&gt;&lt;span style=""&gt;      &lt;/span&gt;&lt;span style="color: blue;"&gt;if&lt;/span&gt; (instanz &amp;lt; 0)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;span style=""&gt;            &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;span style=""&gt;                &lt;/span&gt;&lt;span style="color: blue;"&gt;return&lt;/span&gt; -1 * instanz;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;span style=""&gt;            &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;span style=""&gt;            &lt;/span&gt;&lt;span style="color: blue;"&gt;return&lt;/span&gt; instanz;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;span style=""&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-indent: 35.4pt;" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; color: green; font-family: 'Courier New';"&gt;// 2. Erweiterungsmethode, auch für Int&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;span style=""&gt;      &lt;/span&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;static&lt;/span&gt; &lt;span style="color: blue;"&gt;int&lt;/span&gt; Faktor(&lt;span style="color: blue;"&gt;this&lt;/span&gt; &lt;span style="color: blue;"&gt;int&lt;/span&gt; instanz, &lt;span style="color: blue;"&gt;int&lt;/span&gt; faktor) &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;span style=""&gt;      &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;span style=""&gt;      &lt;/span&gt;&lt;span style=""&gt;      &lt;/span&gt;&lt;span style="color: blue;"&gt;return&lt;/span&gt; instanz * faktor;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;span style=""&gt;      &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;}&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; color: blue; font-family: 'Courier New';"&gt;int&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt; testZahl = -42;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: 10pt; color: teal; font-family: 'Courier New';"&gt;Console&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;.WriteLine(&lt;u&gt;testZahl.Betrag()&lt;/u&gt;.ToString());&lt;span style=""&gt;     &lt;/span&gt;&lt;span style="color: green;"&gt;// Ausgabe: 42&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: 10pt; color: teal; font-family: 'Courier New';"&gt;Console&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;.WriteLine(&lt;u&gt;testZahl.Faktor(5)&lt;/u&gt;.ToString());&lt;span style=""&gt;    &lt;/span&gt;&lt;span style="color: green;"&gt;// Ausgabe: -210&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;Das Beispiel gibt 42 und – 210 aus. In diesem Beispiel kann man nun die &lt;em style=""&gt;Betrag&lt;/em&gt; und &lt;em style=""&gt;Faktor&lt;/em&gt; Methoden für jede Integer Variable nutzen, als wären die Methoden direkt in der Basisklasse System.Int32 als Instanzmethoden vorhanden. Wenn in der System.Int32 Struktur bereits eine &lt;em style=""&gt;Betrag&lt;/em&gt;-Methode mit der gleichen Signatur wie die gleichnamige Erweiterungsmethode existieren würde, so hätte die bereits vorhandene Methode in System.Int32 Vorrang vor der Erweiterungsmethode. Zudem muss auch die Einordnung der Erweiterungsmethode bezüglich des Namensraumes beachtet werden, da der Compiler die erste Erweiterungsmethode nimmt die (hinsichtlich der Namensräume) erreichbar ist. &lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;Ein weiterer interessanter Aspekt ist, dass Erweiterungsmethoden auch vererbt werden, wie im folgenden Beispiel sichtbar ist:&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-size: 10pt; color: blue; font-family: 'Courier New';"&gt;public&lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 10pt; font-family: 'Courier New';"&gt; &lt;span style="color: blue;"&gt;class&lt;/span&gt; &lt;span style="color: teal;"&gt;BaseClass &lt;/span&gt;{ }&lt;span style="color: teal;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-size: 10pt; color: blue; font-family: 'Courier New';"&gt;public&lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 10pt; font-family: 'Courier New';"&gt; &lt;span style="color: blue;"&gt;class&lt;/span&gt; &lt;span style="color: teal;"&gt;InheritedClass&lt;/span&gt; : &lt;span style="color: teal;"&gt;BaseClass &lt;/span&gt;{ }&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-size: 10pt; color: blue; font-family: 'Courier New';"&gt;public&lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 10pt; font-family: 'Courier New';"&gt; &lt;span style="color: blue;"&gt;static&lt;/span&gt; &lt;span style="color: blue;"&gt;class&lt;/span&gt; &lt;span style="color: teal;"&gt;Extension&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-size: 10pt; font-family: 'Courier New';"&gt;{&lt;span style=""&gt;     &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-indent: 35.4pt;" class="MsoNormal"&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: green; font-family: 'Courier New';"&gt;//erweitert BaseClass&lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-indent: 35.4pt;" class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-size: 10pt; color: blue; font-family: 'Courier New';"&gt;public&lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 10pt; font-family: 'Courier New';"&gt; &lt;span style="color: blue;"&gt;static&lt;/span&gt; &lt;span style="color: blue;"&gt;string&lt;/span&gt; WriteType(&lt;span style="color: blue;"&gt;this&lt;/span&gt; &lt;span style="color: teal;"&gt;BaseClass&lt;/span&gt; b) &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;span style=""&gt;      &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;span style=""&gt;      &lt;/span&gt;&lt;span style=""&gt;      &lt;/span&gt;&lt;span style="color: blue;"&gt;return&lt;/span&gt; b.GetType().ToString();&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;span style=""&gt;      &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-size: 10pt; font-family: 'Courier New';"&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span lang="EN-GB" style=""&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span lang="EN-GB" style=""&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-size: 10pt; color: teal; font-family: 'Courier New';"&gt;InheritedClass&lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 10pt; font-family: 'Courier New';"&gt; inhClass = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: teal;"&gt;InheritedClass&lt;/span&gt;();&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; color: teal; font-family: 'Courier New';"&gt;Console&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;.WriteLine(inhClass.WriteType());&lt;span style=""&gt;  &lt;/span&gt;&lt;span style="color: green;"&gt;//gibt "Test.InheritedClass" aus&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;Die Erweiterungsmethode &lt;em style=""&gt;WriteType&lt;/em&gt; erweitert eigentlich die Klasse &lt;em style=""&gt;BaseClass. &lt;/em&gt;Man kann aber &lt;em style=""&gt;WriteType&lt;/em&gt; nun auch als Instanzmethode aller Klassen nutzen, die von BaseClass abgeleitet sind. In dem Beispiel wird &lt;em style=""&gt;WriteType&lt;/em&gt; also wie eine Instanzmethode von &lt;em style=""&gt;InheritedClass &lt;/em&gt;behandelt, da &lt;em style=""&gt;InheritedClass&lt;/em&gt; von &lt;em style=""&gt;BaseClass &lt;/em&gt;abgeleitet ist.&lt;/p&gt;
&lt;h1 style="margin: 24pt 0cm 6pt 21.55pt; page-break-before: always; text-indent: -21.55pt; text-align: justify;"&gt;&lt;a name="_Toc151571270"&gt;&lt;/a&gt;&lt;a name="_Toc150596753"&gt;&lt;span style=""&gt;Objekt Initialisierer&lt;/span&gt;&lt;/a&gt;&lt;/h1&gt;
&lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;Durch Objekt Initialisierer wird es in C# 3.0&lt;span style="color: red;"&gt; &lt;/span&gt;möglich, ähnlich der Initialisierung von Attributen elegant Felder und Eigenschaften einer Klasse oder Struktur zu initialisieren. Somit können nun öffentliche Eigenschaften und Felder von Objekten ohne das explizite Vorhandensein des jeweiligen Konstruktors in beliebiger Reihenfolge initialisiert werden. Dies geschieht über geschweifte Klammern, in denen die einzelnen Felder oder Eigenschaften des Objektes mit Werten belegt werden:&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-size: 10pt; color: blue; font-family: 'Courier New';"&gt;public&lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 10pt; font-family: 'Courier New';"&gt; &lt;span style="color: blue;"&gt;class&lt;/span&gt; &lt;span style="color: teal;"&gt;Adresse&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-size: 10pt; font-family: 'Courier New';"&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-indent: 35.4pt;" class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-size: 10pt; color: blue; font-family: 'Courier New';"&gt;public&lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 10pt; font-family: 'Courier New';"&gt; &lt;span style="color: blue;"&gt;string&lt;/span&gt; Name;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;span style=""&gt;      &lt;/span&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;string&lt;/span&gt; Strasse;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;span style=""&gt;      &lt;/span&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;int&lt;/span&gt; PLZ;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;span style=""&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue; font-family: 'Courier New';"&gt;public&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt; &lt;span style="color: blue;"&gt;string&lt;/span&gt; Ort;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;}&lt;span style="color: maroon;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style=""&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; color: teal; font-family: 'Courier New';"&gt;Adresse&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt; adrEsc = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: teal;"&gt;Adresse&lt;/span&gt; { Name = &lt;span style="color: maroon;"&gt;"ESC Deutschland"&lt;/span&gt;, Strasse = &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin-left: 141.6pt; text-indent: 35.4pt;" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;span style=""&gt; &lt;/span&gt;&lt;span style="color: maroon;"&gt;"Am Fasanengarten 5"&lt;/span&gt;, PLZ = 76131, &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin-left: 177pt;" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; color: maroon; font-family: 'Courier New';"&gt;&lt;span style=""&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;Ort = &lt;span style="color: maroon;"&gt;"Karlsruhe"&lt;/span&gt; };&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin-left: 177pt;" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;Ein weiteres Beispiel mit Schachtelung:&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-size: 10pt; color: teal; font-family: 'Courier New';"&gt;Rectangle&lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 10pt; font-family: 'Courier New';"&gt; rect = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: teal;"&gt;Rectangle&lt;/span&gt; { Location = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: teal;"&gt;Point&lt;/span&gt; { X = 7, Y = 3 }, &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin-left: 177pt;" class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;span style=""&gt;    &lt;/span&gt;Size = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: teal;"&gt;Size&lt;/span&gt; { Width = 21, &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin-left: 283.2pt;" class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-size: 10pt; color: teal; font-family: 'Courier New';"&gt;&lt;span style=""&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 10pt; font-family: 'Courier New';"&gt;Height = 42 } &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin-left: 141.6pt; text-indent: 35.4pt;" class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;span style=""&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;};&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span style=""&gt;Im Beispiel oben hätte man das gleiche einfach über entsprechend verfügbare Konstruktoren erreichen können, aber häufig sind solche umfangreichen Konstruktoren einfach nicht vorhanden. Diese Art von Konstruktoren sind in C# 3.0 nun aber auch nicht mehr notwendig.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h1 style="margin: 24pt 0cm 6pt 21.55pt; page-break-before: always; text-indent: -21.55pt; text-align: justify;"&gt;&lt;a name="_Toc151571271"&gt;&lt;/a&gt;&lt;a name="_Toc150596754"&gt;&lt;span style=""&gt;Collection Initialisierer&lt;/span&gt;&lt;/a&gt;&lt;/h1&gt;
&lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;Mithilfe von Collection Initialisierern kann man &lt;span class="Codefragment"&gt;&lt;span style="font-size: 12pt; font-family: 'Times New Roman','serif';"&gt;bei der Initialisierung eines Objektes, das ICollection&amp;lt;T&amp;gt; (z.B. List&amp;lt;T&amp;gt;) implementiert, &lt;/span&gt;&lt;/span&gt;elegant Elemente &lt;span class="Codefragment"&gt;&lt;span style="font-size: 12pt; font-family: 'Times New Roman','serif';"&gt;hinzufügen. Man verwendet geschweifte Klammern, in denen die einzelnen Elemente mit Kommata voneinander getrennt sind – was dann zum Beispiel so aussieht:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span class="Codefragment"&gt;&lt;span style="font-size: 12pt; font-family: 'Times New Roman','serif';"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: 10pt; color: teal; font-family: 'Courier New';"&gt;List&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;&amp;lt;&lt;span style="color: blue;"&gt;int&lt;/span&gt;&amp;gt; intList = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: teal;"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="color: blue;"&gt;int&lt;/span&gt;&amp;gt;() { 0, 1, 1, 2, 3, 5, 8, 13, 21, 34 };&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style=""&gt;Für die angegebenen Elemente wird entsprechend ihrer Reihenfolge die Methode&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span class="Codefragment"&gt;&lt;span style="font-size: 10pt;"&gt;ICollection&amp;lt;T&amp;gt;.Add(T element)&lt;/span&gt;&lt;/span&gt; &lt;span style=""&gt;&lt;span style=""&gt; &lt;/span&gt;aufgerufen. Natürlich müssen die aufgelisteten Elemente vom Typ T sein oder es muss eine implizite Konvertierung zu T existieren, wie in den folgenden zwei Beispielen deutlich wird:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: 10pt; color: green; font-family: 'Courier New';"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: 10pt; color: green; font-family: 'Courier New';"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: 10pt; color: green; font-family: 'Courier New';"&gt;//Fehler, double kann nicht (implizit) in int konvertiert werden&lt;/span&gt;&lt;span style=""&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-size: 10pt; color: teal; font-family: 'Courier New';"&gt;List&lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 10pt; font-family: 'Courier New';"&gt;&amp;lt;&lt;span style="color: blue;"&gt;int&lt;/span&gt;&amp;gt; intList = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: teal;"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="color: blue;"&gt;int&lt;/span&gt;&amp;gt;() { 0, 1, 1, 2, &lt;span style="background: yellow none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;3.58&lt;/span&gt;}; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: 10pt; color: green; font-family: 'Courier New';"&gt;//OK, da implizite Konvertierungen von float zu double und von int zu //double existieren&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-size: 10pt; color: teal; font-family: 'Courier New';"&gt;List&lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 10pt; font-family: 'Courier New';"&gt;&amp;lt;&lt;span style="color: blue;"&gt;double&lt;/span&gt;&amp;gt; intList = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: teal;"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="color: blue;"&gt;double&lt;/span&gt;&amp;gt;() { 0, 1, 1, 2, 3F}; &lt;/span&gt;&lt;span lang="EN-GB" style=""&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h1 style="margin: 24pt 0cm 6pt 21.55pt; page-break-before: always; text-indent: -21.55pt; text-align: justify;"&gt;&lt;a name="_Toc151571272"&gt;&lt;/a&gt;&lt;a name="_Toc150596755"&gt;&lt;span style=""&gt;Anonyme Typen&lt;/span&gt;&lt;/a&gt;&lt;/h1&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="color: red;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;Anonyme Typen sind vom Compiler automatisch erzeugte simple, &lt;u&gt;namenlose&lt;/u&gt; Klassen, die nur über readonly Eigenschaften (also nur mit get) und dazugehörige private Felder verfügen. Mit namenlos ist gemeint, dass der Compiler der Klasse einen uns nicht bekannten Namen gibt, so dass man nicht direkt Zugriff auf die Klasse hat. Stattdessen erhält man lediglich eine Instanz die man ausschließlich lokal (im Bereich der Deklaration) verwenden kann. &lt;/p&gt;
&lt;p class="MsoNormal"&gt;Anonyme Typen werden mittels eines anonymen Objekt Initialisierers deklariert, also ein Objekt Initialisierer bei dem man den Klassennamen weglässt. Durch diesen anonymen Objekt Initialisierer wird dann die Klasse mit den entsprechenden Eigenschaften erzeugt und man erhält eine Instanz. Anhand der Eigenschaften im Objekt Initialisierer und des jeweiligen Typs der zugewiesenen Werte erzeugt der Compiler die anonyme Klasse, was dann etwa wie folgt aussehen kann:&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="color: red;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="color: red;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-size: 10pt; color: blue; font-family: 'Courier New';"&gt;var&lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 10pt; font-family: 'Courier New';"&gt; person = &lt;span style="color: blue;"&gt;new&lt;/span&gt; { Vorname = &lt;span style="color: maroon;"&gt;"Bill"&lt;/span&gt;, Nachname = &lt;span style="color: maroon;"&gt;"Gates"&lt;/span&gt;, Alter = 56};&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span lang="EN-GB" style="color: red;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;Hierfür generiert der Compiler intern (in MSIL) die folgende Klasse:&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;span style=""&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-GB" style="color: blue;"&gt;internal&lt;/span&gt;&lt;span lang="EN-GB" style=""&gt; &lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: blue; font-family: 'Courier New';"&gt;class&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; font-family: 'Courier New';"&gt; &lt;span style="color: teal;"&gt;??????&lt;strong style=""&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span lang="EN-US" style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;span style=""&gt;    &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span lang="EN-US" style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;span style=""&gt;        &lt;/span&gt;&lt;span style="color: blue;"&gt;private&lt;/span&gt; &lt;span style="color: blue;"&gt;string&lt;/span&gt; _vorname;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span lang="EN-US" style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;span style=""&gt;        &lt;/span&gt;&lt;span style="color: blue;"&gt;private&lt;/span&gt; &lt;span style="color: blue;"&gt;string&lt;/span&gt; _nachname;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span lang="EN-US" style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;span style=""&gt;        &lt;/span&gt;&lt;span style="color: blue;"&gt;private&lt;/span&gt; &lt;span style="color: blue;"&gt;int&lt;/span&gt; _alter;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span lang="EN-US" style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span lang="EN-US" style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;span style=""&gt;        &lt;/span&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;string&lt;/span&gt; Vorname&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span lang="EN-US" style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;span style=""&gt;        &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span lang="EN-US" style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;span style=""&gt;            &lt;/span&gt;&lt;span style="color: blue;"&gt;get&lt;/span&gt; { &lt;span style="color: blue;"&gt;return&lt;/span&gt; _vorname; }&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span lang="EN-US" style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;span style=""&gt;        &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span lang="EN-US" style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span lang="EN-US" style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span lang="EN-US" style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;span style=""&gt;        &lt;/span&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;string&lt;/span&gt; Nachname&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span lang="EN-US" style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;span style=""&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 10pt; font-family: 'Courier New';"&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;span style=""&gt;            &lt;/span&gt;&lt;span style="color: blue;"&gt;get&lt;/span&gt; { &lt;span style="color: blue;"&gt;return&lt;/span&gt; _nachname; }&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;span style=""&gt;        &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;span style=""&gt;        &lt;/span&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;int&lt;/span&gt; Alter&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;span style=""&gt;        &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;span style=""&gt;            &lt;/span&gt;&lt;span style="color: blue;"&gt;get&lt;/span&gt; { &lt;span style="color: blue;"&gt;return&lt;/span&gt; _alter; }&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span lang="EN-US" style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;span style=""&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 10pt; font-family: 'Courier New';"&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;span style=""&gt;    &lt;/span&gt;}&lt;/span&gt;&lt;span lang="EN-GB" style=""&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span lang="EN-GB" style=""&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span lang="EN-GB" style=""&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;Die vom Compiler generierte Klasse enthält wirklich nur readonly Eigenschaften und entsprechende&lt;span style=""&gt;  &lt;/span&gt;Felder, wie auch oben im Beispiel dargestellt. &lt;/p&gt;
&lt;p class="MsoNormal"&gt;Da der Typ der Eigenschaften aus der jeweiligen Klasse bzw. Struktur des zugewiesenen Wertes im Objekt Initialisierer abgeleitet wird, darf man hier nicht &lt;span style="font-size: 10pt; color: blue; font-family: 'Courier New';"&gt;null&lt;/span&gt; zuweisen – ansonsten&lt;span style=""&gt;  &lt;/span&gt;kann der Compiler den Datentyp der Eigenschaft nicht bestimmen:&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: 10pt; color: green; font-family: 'Courier New';"&gt;//Fehler -&amp;gt; Compiler kann Typ von Eigenschaft „Taktfrequenz“ nicht ableiten&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-size: 10pt; color: blue; font-family: 'Courier New';"&gt;var&lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 10pt; font-family: 'Courier New';"&gt; pc = &lt;span style="color: blue;"&gt;new&lt;/span&gt; { CPU = &lt;span style="color: maroon;"&gt;"Intel P4"&lt;/span&gt; , Taktfrequenz = &lt;span style="color: blue;"&gt;null&lt;/span&gt;, Ram = 2048};&lt;/span&gt;&lt;span lang="EN-GB" style=""&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span lang="EN-GB" style=""&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span lang="EN-GB" style=""&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;Sobald eine weitere anonyme Klasse deklariert wird, bei der im Objekt Initialisierer Eigenschaften mit dem gleichen Namen, Typ und in der gleichen Reihenfolge wie&lt;/p&gt;
&lt;p class="MsoNormal"&gt;bei einer anderen bereits vorhandenen anonymen Klassen angegeben sind, verwendet der Compiler die gleiche anonyme Klasse und es sind untereinander Zuweisungen möglich:&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-size: 10pt; color: blue; font-family: 'Courier New';"&gt;var&lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 10pt; font-family: 'Courier New';"&gt; pc = &lt;span style="color: blue;"&gt;new&lt;/span&gt; { CPU = &lt;span style="color: maroon;"&gt;"Intel P4"&lt;/span&gt; , Cores = 1, &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin-left: 70.8pt;" class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;span style=""&gt;   &lt;/span&gt;Taktfrequenz = 2.66, Ram = 2048};&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-size: 10pt; color: blue; font-family: 'Courier New';"&gt;var&lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 10pt; font-family: 'Courier New';"&gt; schnellererPC = &lt;span style="color: blue;"&gt;new&lt;/span&gt; { CPU = &lt;span style="color: maroon;"&gt;"Intel Core 2 Duo Extreme"&lt;/span&gt;, Cores = 2, &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin-left: 106.2pt; text-indent: 35.4pt;" class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;span style=""&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;Taktfrequenz = 6.00, Ram = 4096};&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;pc = schnellererPC;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style=""&gt;Wie man oben sehen kann, sind der Name, der Typ und die Reihenfolge der Eigenschaften im Objekt Initialisierer bei &lt;em style=""&gt;pc&lt;/em&gt; und &lt;em style=""&gt;schnellererPC&lt;/em&gt; identisch, und somit ist &lt;em style=""&gt;schnellererPC&lt;/em&gt; vom gleichen Typ wie &lt;em style=""&gt;pc&lt;/em&gt;. Diese Tatsache erlaubt es uns in der 3. Zeile des Beispiels dass wir die beiden Variablen untereinander zuweisen können.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span style="color: red;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span style="color: red;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h1 style="margin: 24pt 0cm 6pt 21.55pt; page-break-before: always; text-indent: -21.55pt; text-align: justify;"&gt;&lt;a name="_Toc151571273"&gt;&lt;/a&gt;&lt;a name="_Toc150596756"&gt;&lt;span style=""&gt;Lambda Expressions&lt;/span&gt;&lt;/a&gt;&lt;/h1&gt;
&lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;Lambda Expressions sind funktional erweiterte anonyme Methoden (anonyme Methoden gibt es seit C# 2.0). Der augenscheinlichste Unterschied zu anonymen Methoden ist die Syntax: auf die Parameterliste folgt ein Doppelpfeil (=&amp;gt;), gefolgt von einer einzelnen Anweisung oder einem Anweisungsblock, z.B.:&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;(&lt;span style="color: blue;"&gt;int&lt;/span&gt; x, &lt;span style="color: blue;"&gt;int&lt;/span&gt; y) =&amp;gt; x + y&lt;span style=""&gt;  &lt;/span&gt;&lt;span style="color: green;"&gt;//nur eine Anweisung&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;oder:&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: 10pt; color: green; font-family: 'Courier New';"&gt;//mit Anweisungsblock&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;(&lt;span style="color: blue;"&gt;int&lt;/span&gt; x) =&amp;gt; { &lt;span style="color: blue;"&gt;if&lt;/span&gt;( x &amp;lt; 0)&lt;span style=""&gt;  &lt;/span&gt;&lt;span style="color: green;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;span style=""&gt;            &lt;/span&gt;&lt;span style=""&gt;    &lt;/span&gt;&lt;span style=""&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 10pt; font-family: 'Courier New';"&gt;x = -1 * x;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;span style=""&gt;      &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;span style=""&gt;      &lt;/span&gt;&lt;span style=""&gt;       &lt;/span&gt;&lt;span style="color: blue;"&gt;return&lt;/span&gt; x;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;span style=""&gt;      &lt;/span&gt;&lt;span style=""&gt;     &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;}&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;Der Typ des Ausdruckes hinter dem Doppelpfeil bestimmt den Rückgabetyp der Lambda Expression. &lt;span style=""&gt;Dementsprechend hat eine Lambda Expression mit nur einem Methodenaufruf nach dem Doppelpfeil den gleichen Rückgabetyp wie diese Methode. &lt;/span&gt;Falls dem Doppelpfeil ein Anweisungsblock folgt, so wird der Rückgabetyp durch den Ausdruck nach dem &lt;span style="font-size: 10pt; color: blue; font-family: 'Courier New';"&gt;return &lt;/span&gt;&lt;span style=""&gt;Schlüsselwort festgelegt. Sollte das &lt;/span&gt;&lt;span style="font-size: 10pt; color: blue; font-family: 'Courier New';"&gt;return &lt;/span&gt;&lt;span style=""&gt;Schlüsselwort im Anweisungsblock fehlen, dann ist der Rückgabetyp der Lambda Expression &lt;/span&gt;&lt;span style="font-size: 10pt; color: blue; font-family: 'Courier New';"&gt;void&lt;/span&gt;&lt;span style=""&gt;. In folgenden Beispielen wird die Bestimmung des Rückgabetyps veranschaulicht:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style=""&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style=""&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; color: green; font-family: 'Courier New';"&gt;//Rückgabetyp ist void, da Console.WriteLine() void als Rückgabetyp hat&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-size: 10pt; font-family: 'Courier New';"&gt;(&lt;span style="color: blue;"&gt;int&lt;/span&gt; i) =&amp;gt; Console.WriteLine(i.ToString());&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style=""&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; color: green; font-family: 'Courier New';"&gt;//Rückgabetyp ist Int, da x und y vom Typ Int sind&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-size: 10pt; font-family: 'Courier New';"&gt;(&lt;span style="color: blue;"&gt;int&lt;/span&gt; x, &lt;span style="color: blue;"&gt;int&lt;/span&gt; y) =&amp;gt; x + y;&lt;span style=""&gt;  &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; color: green; font-family: 'Courier New';"&gt;//Rückgabetyp ist void, da kein return Schlüsselwort im Block nach //Doppelpfeil&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-size: 10pt; color: blue; font-family: 'Courier New';"&gt;(double&lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 10pt; font-family: 'Courier New';"&gt; x) =&amp;gt; { x = 3.14; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;span style=""&gt;               &lt;/span&gt;&lt;span style=""&gt; &lt;/span&gt;MessageBox.Show(x.ToString());} &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; color: green; font-family: 'Courier New';"&gt;//Rückgabetyp ist double, da ein double (0.5) zu einem&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; color: green; font-family: 'Courier New';"&gt;//int addiert wird und das Ergebnis ein double ist&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;(&lt;span style="color: blue;"&gt;int&lt;/span&gt; i) =&amp;gt; i + 0.5;&lt;/span&gt;&lt;span style=""&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; color: green; font-family: 'Courier New';"&gt;//Rückgabetyp ist string, da nach Doppelpfeil&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; color: green; font-family: 'Courier New';"&gt;//ein string zusammengesetzt wird&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;(&lt;span style="color: blue;"&gt;int&lt;/span&gt; alter) =&amp;gt; &lt;span style="color: maroon;"&gt;"Glückwunsch zum "&lt;/span&gt; + alter + &lt;span style="color: maroon;"&gt;". !"&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;Genau wie bei anonymen Methoden auch muss natürlich die Anzahl der Parameter und deren jeweiliger Datentyp mit denen des Delegate, für den die Lambda Expression angegeben wird, übereinstimmen. Allerdings kann bei Lambda Expressions auf die Angabe des Typs für die Parameter verzichtet werden, da diese vom Kontext her abgeleitet werden können. Dem jeweiligen Parameter der Lambda Expression wird also automatisch der Typ des entsprechenden Parameters des Delegate, für den die Lambda Expression angegeben wird, zugewiesen. In folgendem Beispiel kann man dieses Konzept sehen:&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-size: 10pt; color: blue; font-family: 'Courier New';"&gt;public&lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 10pt; font-family: 'Courier New';"&gt; &lt;span style="color: blue;"&gt;class&lt;/span&gt; &lt;span style="color: teal;"&gt;Person&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-size: 10pt; font-family: 'Courier New';"&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-indent: 35.4pt;" class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-size: 10pt; color: blue; font-family: 'Courier New';"&gt;public&lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 10pt; font-family: 'Courier New';"&gt; &lt;span style="color: blue;"&gt;string&lt;/span&gt; Name = &lt;span style="color: maroon;"&gt;""&lt;/span&gt;;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-indent: 35.4pt;" class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-size: 10pt; color: blue; font-family: 'Courier New';"&gt;public&lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 10pt; font-family: 'Courier New';"&gt; &lt;span style="color: blue;"&gt;int&lt;/span&gt; Alter = 0;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-size: 10pt; font-family: 'Courier New';"&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-size: 10pt; color: blue; font-family: 'Courier New';"&gt;public&lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 10pt; font-family: 'Courier New';"&gt; &lt;span style="color: blue;"&gt;delegate&lt;/span&gt; &lt;span style="color: blue;"&gt;void&lt;/span&gt; &lt;span style="color: teal;"&gt;TestDelegate&lt;/span&gt;(&lt;span style="color: teal;"&gt;Person&lt;/span&gt; person);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span lang="EN-GB" style=""&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: 10pt; color: green; font-family: 'Courier New';"&gt;//wegen&lt;/span&gt;&lt;span style="font-size: 10pt; color: teal; font-family: 'Courier New';"&gt; &lt;/span&gt;&lt;span style="font-size: 10pt; color: green; font-family: 'Courier New';"&gt;TestDelegate ist der Parameter x vom Typ Person &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: 10pt; color: green; font-family: 'Courier New';"&gt;//Rückgabetyp muss void sein, auch durch TestDelegate vorgegeben&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-size: 10pt; color: teal; font-family: 'Courier New';"&gt;TestDelegate&lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 10pt; font-family: 'Courier New';"&gt; del = ( x ) =&amp;gt; Console.WriteLine(x.Name); &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span lang="EN-GB" style=""&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: 10pt; color: green; font-family: 'Courier New';"&gt;//nun darf man bei nur einem Parameter auch die Klammern weglassen&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-size: 10pt; color: teal; font-family: 'Courier New';"&gt;TestDelegate&lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 10pt; font-family: 'Courier New';"&gt; del2 = x =&amp;gt; Console.WriteLine(x.Name); &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span lang="EN-GB" style=""&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;Gleichermaßen wie bei den Parametern muss natürlich auch der Rückgabetyp der Lambda Expression mit dem Rückgabetypen des Delegate übereinstimmen (bzw. eine implizite Konvertierung existieren). Demgemäß liefert die Lambda Expression im obigen Beispiel keinen Rückgabewert, da &lt;span style="font-size: 10pt; color: blue; font-family: 'Courier New';"&gt;void&lt;/span&gt; vom Delegate&lt;span style="font-size: 10pt; color: teal; font-family: 'Courier New';"&gt; TestDelegate&lt;/span&gt; entsprechend als „Rückgabewert“ vorgegeben wird. Ein weiteres Beispiel hierfür:&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: 10pt; color: blue; font-family: 'Courier New';"&gt;public&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt; &lt;span style="color: blue;"&gt;delegate&lt;/span&gt; &lt;span style="background: yellow none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: blue;"&gt;int&lt;/span&gt; &lt;span style="color: teal;"&gt;AnotherTestDelegate&lt;/span&gt;();&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; color: teal; font-family: 'Courier New';"&gt;AnotherTestDelegate&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt; del = () =&amp;gt; &lt;span style="background: yellow none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;0.5&lt;/span&gt;; &lt;span style="color: green;"&gt;//Fehler&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;Dieses Beispiel produziert einen Compiler-Fehler, weil durch den Delegate&lt;span style="font-size: 10pt; color: teal; font-family: 'Courier New';"&gt; AnotherTestDelegate&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt; &lt;/span&gt;ein Integer als Rückgabewert erwartet wird, die Lambda Expression aber einen &lt;span style="font-size: 10pt; color: blue; font-family: 'Courier New';"&gt;double&lt;/span&gt;&lt;span style="font-size: 10pt; color: teal; font-family: 'Courier New';"&gt; &lt;/span&gt;zurückgibt, der auch nicht implizit zu einem Integer konvertiert werden kann.&lt;span style=""&gt;  &lt;/span&gt;Man beachte die leeren Klammern vor dem Doppelpfeil in der Lambda Expression. Diese bedeuten, dass die Lambda Expression über keinerlei Eingabeparameter verfügt, gemäß der Definition des Delegate&lt;span style="font-size: 10pt; color: teal; font-family: 'Courier New';"&gt; AnotherTestDelegate&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;.&lt;/span&gt;&lt;span style="color: red;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;Im Gegensatz zu anonymen Methoden unterliegen Lambda Expressions auch den Regeln des Methoden - Überladens und des Ableitens von Parametertypen für Generics. Nehmen wir etwa folgendes Beispiel: &lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-size: 10pt; color: blue; font-family: 'Courier New';"&gt;delegate&lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 10pt; font-family: 'Courier New';"&gt; &lt;span style="color: blue;"&gt;double&lt;/span&gt;&lt;span style="color: teal;"&gt; TestDel&lt;/span&gt;&amp;lt;T&amp;gt;(T a);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-size: 10pt; color: blue; font-family: 'Courier New';"&gt;private&lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 10pt; font-family: 'Courier New';"&gt; &lt;span style="color: blue;"&gt;static&lt;/span&gt; &lt;span style="color: blue;"&gt;void&lt;/span&gt; DoSimpleMath(&lt;span style="color: teal;"&gt;TestDel&lt;/span&gt;&amp;lt;&lt;span style="color: blue;"&gt;int&lt;/span&gt;&amp;gt; testDel)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-size: 10pt; font-family: 'Courier New';"&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-indent: 35.4pt;" class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-size: 10pt; color: teal; font-family: 'Courier New';"&gt;Console&lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 10pt; font-family: 'Courier New';"&gt;.WriteLine(&lt;span style="color: maroon;"&gt;"int"&lt;/span&gt;);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-size: 10pt; font-family: 'Courier New';"&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-size: 10pt; color: blue; font-family: 'Courier New';"&gt;private&lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 10pt; font-family: 'Courier New';"&gt; &lt;span style="color: blue;"&gt;static&lt;/span&gt; &lt;span style="color: blue;"&gt;void&lt;/span&gt; DoSimpleMath(&lt;span style="color: teal;"&gt;TestDel&lt;/span&gt;&amp;lt;&lt;span style="color: blue;"&gt;double&lt;/span&gt;&amp;gt; testDel)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-size: 10pt; font-family: 'Courier New';"&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-indent: 35.4pt;" class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-size: 10pt; color: teal; font-family: 'Courier New';"&gt;Console&lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 10pt; font-family: 'Courier New';"&gt;.WriteLine(&lt;span style="color: maroon;"&gt;"double"&lt;/span&gt;);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-size: 10pt; font-family: 'Courier New';"&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span lang="EN-GB" style=""&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-size: 10pt; font-family: 'Courier New';"&gt;DoSimpleMath(&lt;span style="background: yellow none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;(&lt;span style="color: blue;"&gt;double&lt;/span&gt; x)&lt;/span&gt; =&amp;gt; x + 0.5);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin-left: 18pt;" class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin-left: 18pt;" class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;Das obige Beispiel gibt „double“ aus, da der Datentyp des Parameters für die Lambda Expression &lt;span style="font-size: 10pt; color: blue; font-family: 'Courier New';"&gt;double&lt;/span&gt;&lt;span style="font-size: 10pt; color: teal; font-family: 'Courier New';"&gt; &lt;/span&gt;ist (siehe gelbe Markierung). Somit wird für den generischen&lt;span style=""&gt;  &lt;/span&gt;Platzhalter T von &lt;span style="font-size: 10pt; color: teal; font-family: 'Courier New';"&gt;TestDel&lt;/span&gt;&lt;span style=""&gt; (dem Argument -Typ der beiden DoSimpleMath Methoden)&lt;/span&gt;&lt;span style="font-size: 10pt; color: teal; font-family: 'Courier New';"&gt; &lt;/span&gt;&lt;span style="font-size: 10pt; color: blue; font-family: 'Courier New';"&gt;double&lt;/span&gt;&lt;span style="font-size: 10pt; color: teal; font-family: 'Courier New';"&gt; &lt;/span&gt;&lt;span style=""&gt;als Typ &lt;/span&gt;eingesetzt und damit dementsprechend die &lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;DoSimpleMath(&lt;span style="color: teal;"&gt;TestDel&lt;/span&gt;&amp;lt;&lt;span style="color: blue;"&gt;double&lt;/span&gt;&amp;gt; testDel) &lt;/span&gt;&lt;span style=""&gt;Methode aufgerufen. Gleichermaßen wird auch für den Rückgabetypen der Lambda Expressions der „passendste“ generische &lt;/span&gt;Delegate&lt;span style=""&gt; und damit die entsprechend passende überladene Methode aufgerufen:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style=""&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-size: 10pt; color: blue; font-family: 'Courier New';"&gt;delegate&lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 10pt; font-family: 'Courier New';"&gt; T &lt;span style="color: teal;"&gt;TestDel&lt;/span&gt;&amp;lt;T&amp;gt;();&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-size: 10pt; color: blue; font-family: 'Courier New';"&gt;private&lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 10pt; font-family: 'Courier New';"&gt; &lt;span style="color: blue;"&gt;static&lt;/span&gt; &lt;span style="color: blue;"&gt;void&lt;/span&gt; DoSimpleMath(&lt;span style="color: teal;"&gt;TestDel&lt;/span&gt;&amp;lt;&lt;span style="color: blue;"&gt;int&lt;/span&gt;&amp;gt; testDel)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-size: 10pt; font-family: 'Courier New';"&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-indent: 35.4pt;" class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-size: 10pt; color: teal; font-family: 'Courier New';"&gt;Console&lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 10pt; font-family: 'Courier New';"&gt;.WriteLine(&lt;span style="color: maroon;"&gt;"int"&lt;/span&gt;);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-size: 10pt; font-family: 'Courier New';"&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-size: 10pt; color: blue; font-family: 'Courier New';"&gt;private&lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 10pt; font-family: 'Courier New';"&gt; &lt;span style="color: blue;"&gt;static&lt;/span&gt; &lt;span style="color: blue;"&gt;void&lt;/span&gt; DoSimpleMath(&lt;span style="color: teal;"&gt;TestDel&lt;/span&gt;&amp;lt;&lt;span style="color: blue;"&gt;double&lt;/span&gt;&amp;gt; testDel)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-indent: 35.4pt;" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; color: teal; font-family: 'Courier New';"&gt;Console&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;.WriteLine(&lt;span style="color: maroon;"&gt;"double"&lt;/span&gt;);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;}&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;DoSimpleMath(() =&amp;gt; &lt;span style="background: yellow none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;5&lt;/span&gt;);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style=""&gt;Dieses Beispiel gibt nun „int“ aus, da die Lambda Expression einen int (siehe gelbe Markierung) zurückgibt und somit der (Rückgabe -) Platzhalter T vom &lt;/span&gt;Delegate&lt;span style="font-size: 10pt; color: teal; font-family: 'Courier New';"&gt; TestDel&lt;/span&gt;&lt;span style=""&gt; auf&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt; &lt;span style="color: blue;"&gt;int&lt;/span&gt; &lt;/span&gt;&lt;span style=""&gt;festgelegt wird. In Folge dessen wird die&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt; DoSimpleMath(&lt;span style="color: teal;"&gt;TestDel&lt;/span&gt;&amp;lt;&lt;span style="color: blue;"&gt;int&lt;/span&gt;&amp;gt; testDel) &lt;/span&gt;&lt;span style=""&gt;Methode verwendet. Für die Zeile&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style=""&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;DoSimpleMath(() =&amp;gt; &lt;span style="background: yellow none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;42.0&lt;/span&gt;);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style=""&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;wird analog entsprechend „double“ ausgegeben, also die &lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;DoSimpleMath(&lt;span style="color: teal;"&gt;TestDel&lt;/span&gt;&amp;lt;&lt;span style="color: blue;"&gt;double&lt;/span&gt;&amp;gt; testDel) &lt;/span&gt;Methode aufgerufen, da nun die Lambda Expression einen &lt;span style="font-size: 10pt; color: blue; font-family: 'Courier New';"&gt;double&lt;/span&gt; zurückgibt (siehe gelbe Markierung). &lt;/p&gt;
&lt;h1 style="margin: 24pt 0cm 6pt 21.55pt; page-break-before: always; text-indent: -21.55pt; text-align: justify;"&gt;&lt;a name="_Toc151571274"&gt;&lt;/a&gt;&lt;a name="_Toc150596757"&gt;&lt;span style=""&gt;LINQ&lt;/span&gt;&lt;/a&gt;&lt;/h1&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;LINQ (Language Integrated Query) ist die größte Neuerung in C# 3.0. Wie der Name schon besagt, handelt es sich dabei um in die Sprache integrierte, SQL ähnliche Strings, mit denen fast jede Art von Daten vergleichsweise elegant gefiltert, gruppiert und sortiert werden kann. Nehmen wir folgendes einfaches Beispiel:&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-size: 10pt; color: blue; font-family: 'Courier New';"&gt;int&lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 10pt; font-family: 'Courier New';"&gt;[] integers = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: blue;"&gt;int&lt;/span&gt;[] { 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55};&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-size: 10pt; color: teal; font-family: 'Courier New';"&gt;IEnumerable&lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 10pt; font-family: 'Courier New';"&gt;&amp;lt;&lt;span style="color: blue;"&gt;int&lt;/span&gt;&amp;gt; evenNumbers = &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin-left: 35.4pt;" class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-size: 10pt; color: blue; font-family: 'Courier New';"&gt;from&lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 10pt; font-family: 'Courier New';"&gt; myNumber &lt;span style="color: blue;"&gt;in&lt;/span&gt; integers &lt;span style="color: blue;"&gt;where&lt;/span&gt; myNumber % 2 == 0 &lt;span style="color: blue;"&gt;select&lt;/span&gt; myNumber;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-size: 10pt; color: blue; font-family: 'Courier New';"&gt;foreach&lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 10pt; font-family: 'Courier New';"&gt; (&lt;span style="color: blue;"&gt;int&lt;/span&gt; number &lt;span style="color: blue;"&gt;in&lt;/span&gt; evenNumbers)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-indent: 35.4pt;" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; color: teal; font-family: 'Courier New';"&gt;Console&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;.WriteLine(number.ToString());&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;}&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;Dieses Beispiel gibt 0, 2, 8 und 34 aus, also alle geraden Zahlen des Arrays &lt;em style=""&gt;integer&lt;/em&gt;. In der 2. Zeile des Beispiels kann man dann auch die eigentliche LINQ Expression sehen:&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; color: blue; font-family: 'Courier New';"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-size: 10pt; color: blue; font-family: 'Courier New';"&gt;from&lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 10pt; font-family: 'Courier New';"&gt; myNumber &lt;span style="color: blue;"&gt;in&lt;/span&gt; integers &lt;span style="color: blue;"&gt;where&lt;/span&gt; myNumber % 2 == 0 &lt;span style="color: blue;"&gt;select&lt;/span&gt; myNumber&lt;/span&gt;&lt;span lang="EN-GB" style=""&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span lang="EN-GB" style=""&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;Wie alle LINQ Ausdrücke in C# fängt auch dieser mit dem &lt;span style="font-size: 10pt; color: blue; font-family: 'Courier New';"&gt;from&lt;/span&gt;&lt;span style=""&gt;  &lt;/span&gt;Schlüsselwort an. Es folgt eine Laufvariable (&lt;em style=""&gt;myNumber&lt;/em&gt;), die ähnlich funktioniert wie die Laufvariable in einer &lt;span style="font-size: 10pt; color: blue; font-family: 'Courier New';"&gt;foreach&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt; &lt;/span&gt;Schleife:&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-size: 10pt; color: blue; font-family: 'Courier New';"&gt;foreach&lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 10pt; font-family: 'Courier New';"&gt; (&lt;span style="color: blue;"&gt;int&lt;/span&gt; myNumber &lt;span style="color: blue;"&gt;in&lt;/span&gt; integers)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;{&lt;span style=""&gt;  &lt;/span&gt;}&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;Die Quellmenge des LINQ Ausdruckes (im Beispiel das Array &lt;em style=""&gt;integers&lt;/em&gt;) wird ähnlich einer Schleife „durchlaufen“ und jedes einzelne Elemente dann jeweils durch diese Laufvariable repräsentiert. Diese Laufvariable ist die eigentliche Variable auf die innerhalb des LINQ Ausdruckes sämtliche Operatoren (z.B. Filterkriterien) angewandt werden. Nach dem &lt;span style="font-size: 10pt; color: blue; font-family: 'Courier New';"&gt;in &lt;/span&gt;&lt;span style=""&gt;Schlüsselwort kommt die zu filternde Menge (hier &lt;em style=""&gt;integers&lt;/em&gt;),&lt;/span&gt; gefolgt von dem &lt;span style="font-size: 10pt; color: blue; font-family: 'Courier New';"&gt;where&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt; &lt;/span&gt;Operator mit dem eigentlichen Filterausdruck als Lambda Expression:&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;myNumber &lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;% 2 == 0&lt;span style=""&gt;  &lt;/span&gt;&lt;span style="color: green;"&gt;//wähle alle geraden Zahlen&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span style=""&gt;Der&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt; &lt;span style="color: blue;"&gt;where&lt;/span&gt; &lt;/span&gt;&lt;span style=""&gt;Operator hat die gleiche Funktion wie der gleichnamige Operator in SQL, sprich das Filtern. Dieser Filterausdruck wird nun auf jedes einzelne Element vom Array &lt;em style=""&gt;integers &lt;/em&gt;angewandt. Über den &lt;/span&gt;&lt;span style="font-size: 10pt; color: blue; font-family: 'Courier New';"&gt;select&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt; &lt;/span&gt;&lt;span style=""&gt;Operator gibt man an, was genau vom Element zurückgegeben werden soll, wie im nächsten Beispiel besser sichtbar wird:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-size: 10pt; color: blue; font-family: 'Courier New';"&gt;public&lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 10pt; font-family: 'Courier New';"&gt; &lt;span style="color: blue;"&gt;class&lt;/span&gt; &lt;span style="color: teal;"&gt;Person&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-size: 10pt; font-family: 'Courier New';"&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-indent: 35.4pt;" class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-size: 10pt; color: blue; font-family: 'Courier New';"&gt;public&lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 10pt; font-family: 'Courier New';"&gt; &lt;span style="color: blue;"&gt;string&lt;/span&gt; Name = &lt;span style="color: maroon;"&gt;""&lt;/span&gt;;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-indent: 35.4pt;" class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-size: 10pt; color: blue; font-family: 'Courier New';"&gt;public&lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 10pt; font-family: 'Courier New';"&gt; &lt;span style="color: blue;"&gt;int&lt;/span&gt; Alter = 0;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-size: 10pt; font-family: 'Courier New';"&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-size: 10pt; color: teal; font-family: 'Courier New';"&gt;Person&lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 10pt; font-family: 'Courier New';"&gt;[] persons = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: teal;"&gt;Person&lt;/span&gt;[] {&lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: teal;"&gt;Person&lt;/span&gt; {Name = &lt;span style="color: maroon;"&gt;"Arthur"&lt;/span&gt;, Alter = 35}, &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin-left: 177pt;" class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;span style=""&gt;    &lt;/span&gt;&lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: teal;"&gt;Person&lt;/span&gt; { Name = &lt;span style="color: maroon;"&gt;"Marvin"&lt;/span&gt;, Alter = 40}, &lt;span style=""&gt;  &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin-left: 177pt;" class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-size: 10pt; color: blue; font-family: 'Courier New';"&gt;&lt;span style=""&gt;    &lt;/span&gt;new&lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 10pt; font-family: 'Courier New';"&gt; &lt;span style="color: teal;"&gt;Person&lt;/span&gt; { Name = &lt;span style="color: maroon;"&gt;"Ford"&lt;/span&gt;, Alter = 55} };&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-size: 10pt; color: teal; font-family: 'Courier New';"&gt;IEnumerable&lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 10pt; font-family: 'Courier New';"&gt;&amp;lt;&lt;span style="color: blue;"&gt;string&lt;/span&gt;&amp;gt; filteredPersons = &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin-left: 35.4pt;" class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-size: 10pt; color: blue; font-family: 'Courier New';"&gt;from&lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 10pt; font-family: 'Courier New';"&gt; person &lt;span style="color: blue;"&gt;in&lt;/span&gt; persons &lt;span style="color: blue;"&gt;where&lt;/span&gt; person.Alter &amp;lt; 50 &lt;span style="color: blue;"&gt;select&lt;/span&gt; person&lt;span style="background: yellow none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;.Name&lt;/span&gt;;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-size: 10pt; color: blue; font-family: 'Courier New';"&gt;foreach&lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 10pt; font-family: 'Courier New';"&gt; (&lt;span style="color: blue;"&gt;string&lt;/span&gt; name &lt;span style="color: blue;"&gt;in&lt;/span&gt; filteredPersons)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;{&lt;span style=""&gt;     &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-indent: 35.4pt;" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; color: green; font-family: 'Courier New';"&gt;//gibt die Namen der Personen mit Alter &amp;lt; 50 aus&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-indent: 35.4pt;" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; color: teal; font-family: 'Courier New';"&gt;Console&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;.WriteLine(name);&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;}&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span style=""&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;In diesem Beispiel wird nun jeweils nur der Name der Personen, die dem Filterkriterium (Alter &amp;lt; 50) entsprechen, zurückgegeben – gemäß der Auswahl mit dem &lt;span style="font-size: 10pt; color: blue; font-family: 'Courier New';"&gt;select&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt; &lt;/span&gt;Operator (person.Name). &lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;In beiden Beispielen oben kann man sehen, dass der LINQ Ausdruck eine Instanz vom Typ IEnumerable&amp;lt;T&amp;gt; zurückgibt. Dies ist aber nicht immer so, da der Rückgabetyp von den benutzten LINQ -Operatoren abhängt.&lt;span style=""&gt;  &lt;/span&gt;So gibt es z.B. den Count Operator, der die Anzahl der Elemente, die zu einem Filterausdruck oder Ähnlichem passen, als Integer zurückgibt:&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span style="color: red;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span style="color: red;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-size: 10pt; color: blue; font-family: 'Courier New';"&gt;int&lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 10pt; font-family: 'Courier New';"&gt;[] integers = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: blue;"&gt;int&lt;/span&gt;[] {0,1,3,5,7,9,12,42, 99, 200, 300 };&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-size: 10pt; color: blue; font-family: 'Courier New';"&gt;int&lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 10pt; font-family: 'Courier New';"&gt; count = (&lt;span style="color: blue;"&gt;from&lt;/span&gt; number &lt;span style="color: blue;"&gt;in&lt;/span&gt; integers &lt;span style="color: blue;"&gt;where&lt;/span&gt; number &amp;lt; 42 &lt;span style="color: blue;"&gt;select&lt;/span&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin-left: 283.2pt; text-indent: 35.4pt;" class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-size: 10pt; font-family: 'Courier New';"&gt;number).Count();&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-size: 10pt; color: teal; font-family: 'Courier New';"&gt;Console&lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 10pt; font-family: 'Courier New';"&gt;.WriteLine(count.ToString()); &lt;span style="color: green;"&gt;//Ausgabe: 7&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-size: 10pt; color: green; font-family: 'Courier New';"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-size: 10pt; color: green; font-family: 'Courier New';"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span style=""&gt;Hier wird nun mit Hilfe des Count Operators die Anzahl der Zahlen ausgegeben, die kleiner als 42 sind. Vielleicht fragen Sie sich jetzt, warum der Count Operator wie eine Methode aufgerufen wird. Das hängt damit zusammen, dass eigentlich alle &lt;/span&gt;LINQ &lt;span style=""&gt;Operatoren als Methoden implementiert sind. Genauer gesagt sind sie als Erweiterungsmethoden in der &lt;/span&gt;&lt;span class="InlineCode"&gt;&lt;em style=""&gt;&lt;span style="font-size: 12pt; font-family: 'Times New Roman','serif';"&gt;System.Query.Sequence&lt;/span&gt;&lt;/em&gt;&lt;/span&gt;&lt;span class="InlineCode"&gt;&lt;span style="font-size: 12pt; font-family: 'Times New Roman','serif';"&gt; Klasse enthalten und erweitern alle Typen die IEnumerable&amp;lt;T&amp;gt; implementiert haben - also unter anderem sämtliche Arrays, List&amp;lt;T&amp;gt; und Stack&amp;lt;T&amp;gt; sowie viele mehr. Daher können &lt;/span&gt;&lt;/span&gt;LINQ &lt;span class="InlineCode"&gt;&lt;span style="font-size: 12pt; font-family: 'Times New Roman','serif';"&gt;Expressions auf alle diese Typen angewandt werden. Praktischerweise kann man dadurch auch die komplexeren Klassen im Array wie Daten aus Datenbanken behandeln und entsprechend mit &lt;/span&gt;&lt;/span&gt;LINQ &lt;span class="InlineCode"&gt;&lt;span style="font-size: 12pt; font-family: 'Times New Roman','serif';"&gt;elegant filtern, sortieren und gruppieren usw. Hierfür gibt es dann auch dutzende Operatoren (eine kompakte Übersicht mit Beispielen finden Sie unter &lt;span style=""&gt; &lt;/span&gt;&lt;a href="http://msdn2.microsoft.com/en-us/vcsharp/aa336746.aspx"&gt;&lt;span style="font-size: 11pt; font-family: 'Calibri','sans-serif';"&gt;http://msdn2.microsoft.com/en-us/vcsharp/aa336746.aspx&lt;/span&gt;&lt;/a&gt;), von denen einige auch von Datenbankabfrage -Sprachen wie SQL her bekannt sind und ähnlich funktionieren - so z.B. die Operatoren Count, Average und GroupBy. Da wie bereits beschrieben die Operatoren als Methoden realisiert sind, können sie auch ganz normal als solche entsprechend aufgerufen werden. D&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;ie Syntax, die Sie in den ersten beiden &lt;/span&gt;LINQ &lt;span style=""&gt;Beispielen gesehen haben, ist also nichts weiter als „Syntaktischer Zucker“ - der C# Compiler ruft einfach für die Schlüsselwörter &lt;/span&gt;&lt;span style="font-size: 10pt; color: blue; font-family: 'Courier New';"&gt;from&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;, &lt;span style="color: blue;"&gt;where&lt;/span&gt; &lt;/span&gt;&lt;span style=""&gt;und &lt;/span&gt;&lt;span style="font-size: 10pt; color: blue; font-family: 'Courier New';"&gt;select&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt; &lt;/span&gt;&lt;span style=""&gt;etc. die dazu passenden &lt;/span&gt;LINQ &lt;span style=""&gt;Methoden auf. Somit sind auch die beiden folgenden &lt;/span&gt;LINQ &lt;span style=""&gt;Ausdrücke semantisch äquivalent:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span class="InlineCode"&gt;&lt;span style="font-size: 12pt; font-family: 'Times New Roman','serif';"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span class="InlineCode"&gt;&lt;span style="font-size: 12pt; font-family: 'Times New Roman','serif';"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; color: green; font-family: 'Courier New';"&gt;//Linq Ausdruck mit C# Schlüsselwörtern&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-size: 10pt; color: teal; font-family: 'Courier New';"&gt;IEnumerable&lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 10pt; font-family: 'Courier New';"&gt;&amp;lt;&lt;span style="color: blue;"&gt;int&lt;/span&gt;&amp;gt; numbersSmallerThan42 = &lt;span style="color: blue;"&gt;from&lt;/span&gt; number &lt;span style="color: blue;"&gt;in&lt;/span&gt; integers &lt;span style="color: blue;"&gt;where&lt;/span&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin-left: 247.8pt;" class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-size: 10pt; font-family: 'Courier New';"&gt;number &amp;lt; 42 &lt;span style="color: blue;"&gt;select&lt;/span&gt; number + 10;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; color: green; font-family: 'Courier New';"&gt;//der gleiche Linq Ausdruck wie oben, aber durch Methodenaufrufe der //entsprechenden Linq -Operatoren (wird Punkt -Notation genannt)&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-size: 10pt; color: teal; font-family: 'Courier New';"&gt;IEnumerable&lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 10pt; font-family: 'Courier New';"&gt;&amp;lt;&lt;span style="color: blue;"&gt;int&lt;/span&gt;&amp;gt; againNumbersSmallerThan42 = integers.Where(i =&amp;gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin-left: 283.2pt;" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;i &amp;lt; 42).Select(i =&amp;gt; i + 10);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;Das Beispiel gibt alle Zahlen aus dem Array &lt;em style=""&gt;integers&lt;/em&gt; zurück die kleiner 42 sind und addiert dann jeweils 10. Welche der beiden Schreibweisen (C# Schlüsselwörter oder Punkt -Notation) Sie bevorzugen und nutzen bleibt somit ganz Ihnen überlassen. &lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;Ein weiterer wichtiger Aspekt bei LINQ ist der Zeitpunkt, zu dem der LINQ Ausdruck ausgeführt wird. Die LINQ Expression wird aufgrund ihrer internen Implementierung (mittels &lt;span style="font-size: 10pt; color: blue; font-family: 'Courier New';"&gt;yield&lt;/span&gt;) &lt;u&gt;nicht&lt;/u&gt; an der Stelle wo sie deklariert ist ausgeführt. Stattdessen kommt sie erst zum Zuge, wenn auf die Elemente der &lt;u&gt;Rückgabeinstanz&lt;/u&gt; des LINQ Ausdruckes zugegriffen wird. Dadurch kann man vor der eigentlichen Verwendung der Rückgabe -Elemente des LINQ Ausdruckes noch das zu filternde Objekt verändern. Diese Veränderungen werden von dem LINQ Ausdruck dann auch berücksichtigt: &lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; color: blue; font-family: 'Courier New';"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; color: blue; font-family: 'Courier New';"&gt;int&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;[] integers = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: blue;"&gt;int&lt;/span&gt;[8];&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; color: blue; font-family: 'Courier New';"&gt;for&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt; (&lt;span style="color: blue;"&gt;int&lt;/span&gt; i = 0; i &amp;lt; 5; i++) &lt;span style="color: green;"&gt;//initialisiert integers mit den Zahlen 1 - 5&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-indent: 35.4pt;" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;integers[i] = i + 1;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;span style=""&gt;           &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; color: green; font-family: 'Courier New';"&gt;//liefert alle Zahlen aus &lt;em style=""&gt;integers&lt;/em&gt; die kleiner 0 sind, also würde //normalerweise keine einzige Zahl zurückgegeben werden&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-size: 10pt; color: teal; font-family: 'Courier New';"&gt;IEnumerable&lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 10pt; font-family: 'Courier New';"&gt;&amp;lt;&lt;span style="color: blue;"&gt;int&lt;/span&gt;&amp;gt; numbers = &lt;span style="color: blue;"&gt;from&lt;/span&gt; number &lt;span style="color: blue;"&gt;in&lt;/span&gt; integers &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin-left: 212.4pt; text-indent: 35.4pt;" class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-size: 10pt; color: blue; font-family: 'Courier New';"&gt;where&lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 10pt; font-family: 'Courier New';"&gt; number &amp;lt; 0 &lt;span style="color: blue;"&gt;select&lt;/span&gt; number;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-size: 10pt; font-family: 'Courier New';"&gt;integers[5] = -42;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-size: 10pt; font-family: 'Courier New';"&gt;integers[6] = -7;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-size: 10pt; font-family: 'Courier New';"&gt;integers[7] = -9;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-size: 10pt; color: blue; font-family: 'Courier New';"&gt;foreach&lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 10pt; font-family: 'Courier New';"&gt; (&lt;span style="color: blue;"&gt;int&lt;/span&gt; myNumber &lt;span style="color: blue;"&gt;in&lt;/span&gt; numbers)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin-left: 35.4pt;" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; color: green; font-family: 'Courier New';"&gt;//gibt - 42, -7 und -9 aus, da jetzt erst auf Elemente von numbers //zugegriffen wird, und damit erst &lt;strong style=""&gt;&lt;u&gt;HIER&lt;/u&gt;&lt;/strong&gt; der LINQ Ausdruck über das //&lt;em style=""&gt;integers&lt;/em&gt; – Array läuft&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-indent: 35.4pt;" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; color: teal; font-family: 'Courier New';"&gt;Console&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;.WriteLine(myNumber.ToString()); &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;Der LINQ Ausdruck wird in diesem Beispiel innerhalb der &lt;span style="font-size: 10pt; color: blue; font-family: 'Courier New';"&gt;foreach&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt; &lt;/span&gt;Schleife ausgeführt,&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;da erst hier der Zugriff auf die Elemente von &lt;em style=""&gt;numbers&lt;/em&gt; (dem Rückgabewert der LINQ Expression) erfolgt. Folglich gibt das Beispiel die kurz vorher zu &lt;em style=""&gt;integers&lt;/em&gt; hinzugefügten negativen Zahlen aus, obwohl es an der eigentlichen Stelle der Deklaration des LINQ Ausdruckes in &lt;em style=""&gt;integers&lt;/em&gt; noch keine negativen Zahlen gibt. &lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;Dieses Verhalten von LINQ tritt jedoch nicht immer auf. Bei Verwendung der Aggregat -Operatoren (z.B. Count, Min, Max und Average) wird der LINQ Ausdruck sofort an der Stelle ausgeführt wo er deklariert ist, wie man etwa in folgendem Beispiel sehen kann:&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; color: blue; font-family: 'Courier New';"&gt;int&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;[] integers = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: blue;"&gt;int&lt;/span&gt;[8];&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; color: blue; font-family: 'Courier New';"&gt;for&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt; (&lt;span style="color: blue;"&gt;int&lt;/span&gt; i = 0; i &amp;lt; 5; i++) &lt;span style="color: green;"&gt;//initialisiert integers mit den Zahlen 1 - 5&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-size: 10pt; font-family: 'Courier New';"&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-indent: 35.4pt;" class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-size: 10pt; font-family: 'Courier New';"&gt;integers[i] = i + 1;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-size: 10pt; font-family: 'Courier New';"&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; color: green; font-family: 'Courier New';"&gt;//LINQ Ausdruck wird wegen Count Operator sofort hier ausgeführt&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-size: 10pt; color: blue; font-family: 'Courier New';"&gt;int&lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 10pt; font-family: 'Courier New';"&gt; numbersCount = (&lt;span style="color: blue;"&gt;from&lt;/span&gt; number &lt;span style="color: blue;"&gt;in&lt;/span&gt; integers &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin-left: 106.2pt; text-indent: 35.4pt;" class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-size: 10pt; color: blue; font-family: 'Courier New';"&gt;where&lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 10pt; font-family: 'Courier New';"&gt; number &amp;lt; 0 &lt;span style="color: blue;"&gt;select&lt;/span&gt; number)&lt;span style="background: yellow none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;.Count()&lt;/span&gt;;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;integers[5] = -42;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;integers[6] = -7;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;integers[7] = -9;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; color: green; font-family: 'Courier New';"&gt;//gibt 0 aus, da der LINQ Ausdruck oben bei der Deklaration ausgeführt //wurde, und zu diesem Zeitpunkt gab es im &lt;em style=""&gt;integers&lt;/em&gt; Array keine Zahlen &amp;lt; 0 &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; color: teal; font-family: 'Courier New';"&gt;Console&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;.WriteLine(numbersCount.ToString());&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;Das Beispiel oben gibt diesmal 0 aus, da der LINQ Ausdruck aufgrund des Count Operators direkt an der deklarierten Stelle ausgeführt wird. Somit haben die späteren Änderungen von &lt;em style=""&gt;integers&lt;/em&gt; keinerlei Auswirkung auf das Ergebnis der LINQ Expression.&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;
&lt;p style="" class="MsoNormal"&gt;Zusätzlich zu den oben beschriebenen Features von LINQ wird es LINQ auch für XML betreffende Klassen (Bezeichnung: &lt;strong style=""&gt;XLINQ&lt;/strong&gt;) sowie für Datenobjekte von ADO.NET (Bezeichnung: &lt;strong style=""&gt;DLINQ&lt;/strong&gt;) geben.&lt;/p&gt;
&lt;h1 style="margin: 24pt 0cm 6pt 21.55pt; page-break-before: always; text-indent: -21.55pt; text-align: justify;"&gt;&lt;a name="_Toc151571275"&gt;Schlusswort&lt;/a&gt;&lt;/h1&gt;
&lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;Wie Sie in diesem Whitepaper lesen konnten, wird C# 3.0 mit einigen interessanten Neuerungen aufwarten, Features, die C# noch produktiver machen werden. Dadurch wird die Programmierung in einigen Anwendungsgebieten noch weiter vereinfacht werden – vor allem durch LINQ, das die bisher vorhandene Lücke zwischen der Anwendungsprogammierung und Datenbanken (bzw. Datenbanksprachen) verkleinern wird. Um die Beispiele nachvollziehen zu können oder auch um einfach mit C# 3.0 zu experimentieren brauchen sie das LINQ May 2006 CTP (zu finden unter:&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=1E902C21-340C-4D13-9F04-70EB5E3DCEEA&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?FamilyID=1E902C21-340C-4D13-9F04-70EB5E3DCEEA&amp;amp;displaylang=en&lt;/a&gt;&lt;span style=""&gt;  &lt;/span&gt;). &lt;/p&gt;&lt;img src="http://blogs.escde.net/sebastian/aggbug/74.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Sebastian</dc:creator>
            <guid>http://blogs.escde.net/sebastian/archive/2007/04/16/74.aspx</guid>
            <pubDate>Mon, 16 Apr 2007 10:51:51 GMT</pubDate>
            <wfw:comment>http://blogs.escde.net/sebastian/comments/74.aspx</wfw:comment>
            <comments>http://blogs.escde.net/sebastian/archive/2007/04/16/74.aspx#feedback</comments>
            <slash:comments>7</slash:comments>
            <wfw:commentRss>http://blogs.escde.net/sebastian/comments/commentRss/74.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.escde.net/sebastian/services/trackbacks/74.aspx</trackback:ping>
        </item>
    </channel>
</rss>