<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://www.aspnetzone.de/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Peter Bucher</title><link>http://www.aspnetzone.de/blogs/peterbucher/default.aspx</link><description>Auf den Spuren von .NET</description><dc:language /><generator>CommunityServer 2.1 SP2 (Build: 61120.2)</generator><item><title>See# Party 2011 am Bodensee</title><link>http://www.aspnetzone.de/blogs/peterbucher/archive/2011/04/26/see-party-2011-am-bodensee.aspx</link><pubDate>Tue, 26 Apr 2011 17:42:00 GMT</pubDate><guid isPermaLink="false">ce930855-ae9b-4fa4-8077-06a76071cc6a:221680</guid><dc:creator>Peter Bucher</dc:creator><slash:comments>1</slash:comments><comments>http://www.aspnetzone.de/blogs/peterbucher/comments/221680.aspx</comments><wfw:commentRss>http://www.aspnetzone.de/blogs/peterbucher/commentrss.aspx?PostID=221680</wfw:commentRss><description>&lt;a href="http://www.seesharpparty.de/"&gt;&lt;img src="http://www.seesharpparty.de/bausteine.net/img/showimg.aspx?biid=43705&amp;amp;domid=1096&amp;amp;width=468" align="right"&gt;&lt;/a&gt;
&lt;p&gt;
Die vom &lt;a href="http://dotnetkk.de/"&gt;.NET-Stammtisch Konstanz-Kreuzlingen (DE / CH)&lt;/a&gt; veranstaltete &lt;b&gt;.NET Community Konferenz&lt;/b&gt; mit dem Namen &lt;a href="http://www.seesharpparty.de/"&gt;See# Party&lt;/a&gt; geht in die zweite Runde.&amp;nbsp;&lt;/p&gt;&lt;p&gt;Die Rückmeldungen und Stimmen aus der ganzen .NET Community von Deutschland und der Schweiz von der ersten Veranstaltung im letzten Jahr waren so positiv, das die Usergroup gestützt durch einen &lt;a href="http://dotnetkk.de/de/Ueber-uns/Der-Verein/page39449.htm"&gt;Schweizer-Verein (Usergroup)&lt;/a&gt;, eine zweite Konferenz geplant hat, die dieses Jahr am 20. August stattfindet.&lt;/p&gt;&lt;p&gt;- &lt;a href="http://www.seesharpparty.de/de/SSP2010/Reviews/page39148.htm"&gt;Rückblick in Form von Bildern und Blogpost-Feedback zur See# Party 2010 um einen Eindruck zu bekommen&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Für &lt;b&gt;ganz frühe&lt;/b&gt; Frühbucher &lt;a href="http://www.seesharpparty.de/de/Anmeldung/page38401.htm"&gt;gehts hier lang&lt;/a&gt;!&lt;/p&gt;&lt;p&gt;Die Agenda mitsamt ihren Sprechern und Themen sollte für jeden von euch etwas beinhalten. (Der Inhalt kann sich noch ändern, dies ist eine Kopie. (&lt;a href="http://www.seesharpparty.de/de/Agenda/page38395.htm"&gt;Hier gehts zum Original&lt;/a&gt;).&lt;br&gt;Ich habe die aus meiner Sicht herausstechenden Themen hervorgehoben.&lt;br&gt;&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;table style="border:1px solid grey;width:80%;" cellpadding="2" cellspacing="0"&gt;



&lt;tr&gt;
&lt;th&gt;Zeit&lt;/th&gt;
&lt;th&gt;Track 1&lt;br&gt;Web&lt;/th&gt;
&lt;th&gt;Track 2&lt;br&gt;Mobile&lt;/th&gt;
&lt;th&gt;Track 3&lt;br&gt;Desktop&lt;/th&gt;
&lt;th&gt;Track 4&lt;br&gt;Cloud&lt;/th&gt;&lt;/tr&gt;
&lt;tr style="background-color:silver;"&gt;
&lt;td valign="top"&gt;08:30&lt;/td&gt;
&lt;td class="center" colspan="4" valign="top"&gt;Einlass&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top"&gt;09:00&lt;/td&gt;
&lt;td class="center" colspan="4" valign="top"&gt;Begrüßung:&lt;br&gt;(Jürgen Gutsch, Tilo Schinke, Golo Roden)&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top"&gt;09:15&lt;/td&gt;
&lt;td class="center" colspan="4" valign="top"&gt;&lt;i&gt;&lt;b&gt;Keynote: Eine Branche im Wandel?&lt;br&gt;(Laurin Stoll)&lt;/b&gt;&lt;/i&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="background-color:silver;"&gt;
&lt;td valign="top"&gt;10:00&lt;/td&gt;
&lt;td class="center" colspan="4" valign="top"&gt;Pause&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top"&gt;10:15&lt;/td&gt;
&lt;td valign="top"&gt;Sponsor Session&lt;br&gt;ASP.NET MVC 3&lt;br&gt;(Microsoft Schweiz)&lt;/td&gt;
&lt;td valign="top"&gt;Phone 7 - Did they save us from our phones?&lt;br&gt;(David Tielke)&lt;/td&gt;
&lt;td valign="top"&gt;XAML Deep Dive&lt;br&gt;(Mathias Raacke)&lt;/td&gt;
&lt;td valign="top"&gt;Cloud, On-Premise &amp;amp; Co – was für wen?&lt;br&gt;(Golo Roden)&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="background-color:silver;"&gt;
&lt;td valign="top"&gt;11:15&lt;/td&gt;
&lt;td class="center" colspan="4" valign="top"&gt;Pause&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top"&gt;11:45&lt;/td&gt;
&lt;td valign="top"&gt;SharePoint&lt;br&gt;(Thorsten Hans)&lt;/td&gt;
&lt;td valign="top"&gt;Sponsor Session&lt;br&gt;Caché&lt;br&gt;(InterSystems)&lt;/td&gt;
&lt;td valign="top"&gt;&lt;i&gt;&lt;b&gt;WCF 4.0 - Die Neuerungen&lt;br&gt;(David Tielke)&lt;/b&gt;&lt;/i&gt;&lt;/td&gt;
&lt;td valign="top"&gt;Die Microsoft Cloud - wolkig mit Sonnenschein&lt;br&gt;(Robert Eichenseer)&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="background-color:silver;"&gt;
&lt;td valign="top"&gt;12:45&lt;/td&gt;
&lt;td class="center" colspan="4" valign="top"&gt;Mittagspause&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top"&gt;13:45&lt;/td&gt;
&lt;td valign="top"&gt;&lt;i&gt;&lt;b&gt;Agil 2.0 - Das&amp;nbsp;Agile Developement Framework&lt;/b&gt;&lt;/i&gt;&lt;br&gt;&lt;i&gt;&lt;b&gt;(Golo Roden)&lt;/b&gt;&lt;/i&gt;&lt;/td&gt;
&lt;td valign="top"&gt;&lt;i&gt;&lt;b&gt;The Pragmatic Entrepreneur&lt;br&gt;(Laurin Stoll)&lt;/b&gt;&lt;/i&gt;&lt;/td&gt;
&lt;td valign="top"&gt;&lt;i&gt;&lt;b&gt;Accessibility - Digitale Barrieren und wen wir damit aussperren&lt;br&gt;(Jürgen Gutsch)&lt;/b&gt;&lt;/i&gt;&lt;/td&gt;
&lt;td valign="top"&gt;SOS: Optimizing the Wire&lt;br&gt;(Hannes Preishuber)&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="background-color:silver;"&gt;
&lt;td valign="top"&gt;14:45&lt;/td&gt;
&lt;td class="center" colspan="4" valign="top"&gt;Pause&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top"&gt;15:15&lt;/td&gt;
&lt;td valign="top"&gt;User Interface Patterns in Silverlight&lt;br&gt;(Roland Weigelt)&lt;/td&gt;
&lt;td valign="top"&gt;WP7 Jumpstart - von 0 auf App!&lt;br&gt;(Karsten Samaschke)&lt;/td&gt;
&lt;td valign="top"&gt;Sponsor Session&lt;br&gt;PostSharp&lt;br&gt;(SharpCrafters)&lt;/td&gt;
&lt;td valign="top"&gt;Wer bin ich? - Von Active Directory zu einer Windows Azure Application&lt;br&gt;(Robert Eichenseer)&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="background-color:silver;"&gt;
&lt;td valign="top"&gt;16:15&lt;/td&gt;
&lt;td class="center" colspan="4" valign="top"&gt;Pause&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top"&gt;16:45&lt;/td&gt;
&lt;td valign="top"&gt;ASP.NET Dynamic Data&lt;br&gt;(Mathias Raacke)&lt;/td&gt;
&lt;td valign="top"&gt;Windows Phone 7 - Developer Tools &amp;amp; Toolkits&lt;br&gt;(Patrick Getzmann)&lt;/td&gt;
&lt;td valign="top"&gt;&lt;i&gt;&lt;b&gt;Workflow Foundation 4 - Getting Started&lt;/b&gt;&lt;/i&gt;&lt;br&gt;&lt;i&gt;&lt;b&gt;(Boas Enkler)&lt;/b&gt;&lt;/i&gt;&lt;/td&gt;
&lt;td valign="top"&gt;Sponsor Session&lt;br&gt;List&amp;amp;Label&lt;br&gt;(combit GmbH)&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="background-color:silver;"&gt;
&lt;td valign="top"&gt;17:45&lt;/td&gt;
&lt;td class="center" colspan="4" valign="top"&gt;Pause&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top"&gt;18:00&lt;/td&gt;
&lt;td class="center" colspan="4" valign="top"&gt;&lt;i&gt;&lt;b&gt;Große Verlosung und Abschlussveranstaltung&lt;br&gt;(Jürgen Gutsch, Tilo Schinke, Golo Roden)&lt;/b&gt;&lt;/i&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;Weitere, nähere Infos gibt es unter dem &lt;a href="http://www.aspnetzone.de/blogs/juergengutsch/archive/2011/04/01/see-party-2011.aspx"&gt;Blogpost von Jürgen Gutsch zur See# Party 2011&lt;/a&gt; oder auf der &lt;a href="http://www.seesharpparty.de/"&gt;offiziellen Seite&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;&lt;b&gt;Wir sehen uns dort&lt;/b&gt;, zur vorzeitigen &lt;a href="http://www.seesharpparty.de/de/Anmeldung/page38401.htm"&gt;Anmeldung mit Frühbucherrabatt gehts hier lang&lt;/a&gt;.&lt;br&gt;&lt;/p&gt;&lt;img src="http://www.aspnetzone.de/aggbug.aspx?PostID=221680" width="1" height="1"&gt;</description><category domain="http://www.aspnetzone.de/blogs/peterbucher/archive/tags/Community/default.aspx">Community</category><category domain="http://www.aspnetzone.de/blogs/peterbucher/archive/tags/Events/default.aspx">Events</category><category domain="http://www.aspnetzone.de/blogs/peterbucher/archive/tags/Stammtisch/default.aspx">Stammtisch</category><category domain="http://www.aspnetzone.de/blogs/peterbucher/archive/tags/See_2300_%20Party/default.aspx">See# Party</category></item><item><title>Das neue Projekt der "zwei" - http://www.xmlrepository.ch/</title><link>http://www.aspnetzone.de/blogs/peterbucher/archive/2011/01/11/das-neue-projekt-der-zwei-http-www-xmlrepository-ch.aspx</link><pubDate>Tue, 11 Jan 2011 08:37:00 GMT</pubDate><guid isPermaLink="false">ce930855-ae9b-4fa4-8077-06a76071cc6a:220482</guid><dc:creator>Peter Bucher</dc:creator><slash:comments>2</slash:comments><comments>http://www.aspnetzone.de/blogs/peterbucher/comments/220482.aspx</comments><wfw:commentRss>http://www.aspnetzone.de/blogs/peterbucher/commentrss.aspx?PostID=220482</wfw:commentRss><description>&lt;a href="http://www.goloroden.de/"&gt;Golo Roden&lt;/a&gt; und meine Wenigkeit haben sich seit langem wieder eine Auszeit aus der stressigen Realität gegönnt.&lt;br&gt;&lt;br&gt;Dabei kam die Idee auf, eine schon etwas ältere Idee neu anzupacken, zu verfeinern, sodass etwas richtig gutes, brauchbares hinten rauskommt.&lt;br&gt;Der Name bleibt gleich wie er schon bei der älteren Idee war "XmlRepository". Nur hat sich basierend auf der älteren Idee und deren Eigenheiten "&lt;b&gt;schlank, einfach, praktisch&lt;/b&gt;" etwas viel praktischeres und brauchbareres gegeben, als es der frühere Prototyp war.&lt;br&gt;&lt;br&gt;XmlRepository - das es auf &lt;a href="http://www.xmlrepository.ch/"&gt;http://www.xmlrepository.ch/&lt;/a&gt; zum Download gibt, ist wie folgt auf der Seite selber kurz umschrieben:&lt;br&gt;&lt;br&gt;
&lt;div class="Quotes"&gt;XML-basiertes, threadsicheres Repository für flache .NET-Objekte, welches&lt;br&gt;
                    &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;das Dateisystem und In-Memory unterstützt.&lt;/div&gt;
&lt;br&gt;&lt;br&gt;
&lt;p&gt;Folgend ein bisschen Beispielcode, damit jeder sich ein ungefähres Bild der Anwendung machen kann:&lt;/p&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;code&gt;&lt;span style="color: Black;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;XmlRepository.DefaultQueryProperty &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; &lt;span style="color: #666666;background-color: #e4e4e4;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;"Id"&lt;/span&gt;;&lt;br /&gt;                            XmlRepository.DataProvider &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;new&lt;/span&gt; XmlFileProvider(&lt;span style="color: #666666;background-color: #e4e4e4;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;"~/App_Data/"&lt;/span&gt;);&lt;br /&gt;&lt;br /&gt;                            &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;using&lt;/span&gt;(var repository &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; XmlRepository.GetInstance&amp;lt;Foo&amp;gt;) {&lt;br /&gt;                                var foos &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; repository.LoadAllBy(f =&amp;gt; f.Id &amp;gt; 42);&lt;br /&gt;                                repository.SaveOnSubmit(&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;new&lt;/span&gt; Foo { Id &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; 27, ... });&lt;br /&gt;                                repository.DeleteOnSubmit(f =&amp;gt; f.Id == 23);&lt;br /&gt;                            }&lt;/span&gt;&lt;/code&gt;&lt;br&gt;&lt;br&gt;XmlRepository ist aus unserer Sicht entwickelt und sehr geeignet für:&lt;br&gt;&lt;ul&gt;&lt;li&gt;Schnell &lt;b&gt;Prototypen &lt;/b&gt;mit simplen Datenstrukturen entwerfen&lt;/li&gt;&lt;li&gt;&lt;b&gt;Einfache und schnelle Einbindung einer Datenquelle&lt;/b&gt; für Datenstrukturen von einfacher bis mittlerer Komplexität&lt;/li&gt;&lt;li&gt;Sehr &lt;b&gt;für Projekte (Web / Client) geeignet&lt;/b&gt;, die &lt;b&gt;nicht &lt;/b&gt;einen &lt;b&gt;sehr grossen Datenbestand&lt;/b&gt;, sowie &lt;b&gt;wenig Schreibende&lt;/b&gt; Zugriffe zu verzeichnen hat&lt;br&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;Sehr effiziente&lt;/b&gt;, &lt;b&gt;typsichere &lt;/b&gt;und &lt;b&gt;bequeme Alternative&lt;/b&gt; für manuelle &lt;b&gt;XML-Anbindung&lt;/b&gt;&lt;/li&gt;&lt;/ul&gt;Auch wenn bei dir, werter Leser, kein Anwendungfall zutreffen mag, kann man von jedem Code lernen. Ob es jetzt sei, wie man etwas nicht macht - oder wie man es auch noch - oder besser - machen könnte.&lt;br&gt;&lt;img src="http://www.aspnetzone.de/aggbug.aspx?PostID=220482" width="1" height="1"&gt;</description></item><item><title>Teil 1: Umkehrung der Kontrolle erkärt, oder: Von der Fabrikmethode zum DI-Container</title><link>http://www.aspnetzone.de/blogs/peterbucher/archive/2010/12/05/Teil-1-_2D00_-Umkehrung-der-Kontrolle-erklaert-oder_5F00_Von-der-Fabrikmethode-zum-DI_5F00_Container.aspx</link><pubDate>Sun, 05 Dec 2010 13:47:00 GMT</pubDate><guid isPermaLink="false">ce930855-ae9b-4fa4-8077-06a76071cc6a:220259</guid><dc:creator>Peter Bucher</dc:creator><slash:comments>1</slash:comments><comments>http://www.aspnetzone.de/blogs/peterbucher/comments/220259.aspx</comments><wfw:commentRss>http://www.aspnetzone.de/blogs/peterbucher/commentrss.aspx?PostID=220259</wfw:commentRss><description>&lt;P&gt;LightCore gibt es schon seit längerer Zeit, andere DI-Container noch länger.&lt;BR&gt;In dieser Blogpostreihe geht es aber nicht primär um LightCore, auch nicht um die anderen DI-Container.&lt;/P&gt;
&lt;P&gt;Ich möchte mit diesem Blogpost versuchen zu erkären, wie denn die ganze Geschichte funktioniert. &lt;/P&gt;
&lt;P&gt;Vom Ursprung bis zu einer implementierten Komponente.&lt;/P&gt;
&lt;P&gt;Das Feedback zur LightCore-Webseite und LightCore selber hat auf alle Richtungen ausgeschlagen.&lt;/P&gt;
&lt;P&gt;Von: Wow, cool. Brauche ich!, zu: Was ist das denn?, bis zu: Braucht man sowas?, über: Sowas braucht man nicht!, bis zu: Mache ich von Hand oder in 10 Zeilen!.&lt;/P&gt;
&lt;P&gt;An dieser Stelle sei gesagt: Ich würde die Fragen nach dem "brauchen" in jedem Fall mit "Ja" beantworten, je nach Kontext wo denn etwas eingesetzt werden soll.&lt;/P&gt;
&lt;P&gt;Die Grundprobleme:&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;&lt;STRONG&gt;Abhängigkeit&lt;/STRONG&gt; zu konkreten Typen 
&lt;LI&gt;&lt;STRONG&gt;Redundanz&lt;/STRONG&gt; bei der &lt;STRONG&gt;Konstruktion&lt;/STRONG&gt; von Typen jeglicher Art 
&lt;LI&gt;Keine einfache Möglichkeit der &lt;STRONG&gt;Austauschbarkeit&lt;/STRONG&gt; von Typen 
&lt;LI&gt;Keine einfache Möglichkeit der &lt;STRONG&gt;Erweiterbarkeit&lt;/STRONG&gt; über Typen&lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;Wieso überhaupt "Abhängigkeit lösen"?&lt;/P&gt;
&lt;P&gt;Um die Probleme 2, 3 bis 4 zu lösen. Das heisst, die möglichen Redundanzen - also bspw. doppelten Instanziierungen von Klassen - zu vermeiden. Durch das Lösen der Abhänigigkeit von einem konkreten zu einem abstrakten Typen können die Typen ausgetauscht werden und eine Erweiterung ist mit weniger Aufwand möglich.&lt;/P&gt;
&lt;P&gt;Die Abhängigkeit wird nicht "verbannt", sondern gelöst. Lösen heisst in diesem Fall, dass die Abhängigkeit nicht mehr auf _einen_&amp;nbsp; _konkreten_ Typen besteht, sondern auf _eine_ Abstraktion, die _mehrere_ unterschiedliche Implementationen beinhalten kann.&lt;/P&gt;
&lt;P&gt;Anstelle dass nur "World" genutzt werden kann, kann dann mithilfe der Abstraktion "WorldBase", "SecondWorld", "IrgendwasWorld", etc... benutzt werden.&lt;/P&gt;
&lt;P&gt;Diese Grundprobleme können auf verschiedene Arten gelöst werden. Vorerst die einfachsten Möglichkeiten.&lt;/P&gt;
&lt;P&gt;Eine einfache Abhängigkeit zu konkreten Typen kann folgendermassen aussehen:&lt;/P&gt;
&lt;P&gt;&lt;code&gt;&lt;span style="color: Black;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;World world &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;new&lt;/span&gt; World();&lt;br /&gt;world.SayHello();&lt;/span&gt;&lt;/code&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;In diesem Beispiel ist die Methode "&lt;STRONG&gt;SayHello&lt;/STRONG&gt;" von der konkreten Klasse "&lt;STRONG&gt;World&lt;/STRONG&gt;" abhängig.&lt;/P&gt;
&lt;P&gt;Wollen wir diese &lt;STRONG&gt;Abhängigkeit&lt;/STRONG&gt; &lt;STRONG&gt;lockern&lt;/STRONG&gt; &lt;STRONG&gt;/&lt;/STRONG&gt; &lt;STRONG&gt;lösen&lt;/STRONG&gt;, brauchen wir eine &lt;STRONG&gt;Abstraktion irgend einer Art&lt;/STRONG&gt;.&lt;BR&gt;Das kann ein Interface sein, eine Abstrakte Klasse oder auch eine einfache konkrete Oberklasse.&lt;/P&gt;
&lt;P&gt;Am Beispiel einer abstrakten Klasse:&lt;/P&gt;
&lt;P&gt;&lt;code&gt;&lt;span style="color: Black;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;WorldBase world &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;new&lt;/span&gt; World();&lt;br /&gt;world.SayHello();&lt;/span&gt;&lt;/code&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Ja, das war erst der erste Schritt. Das Problem besteht immer noch, es liegt in "new &lt;STRONG&gt;World&lt;/STRONG&gt;();". Wir referenzieren den Konstruktur der konkreten Klasse.&lt;BR&gt;Die einfachste Lösung hierfür ist eine &lt;STRONG&gt;Fabrikmethode&lt;/STRONG&gt; (Factory Method), womit die Konstruktion der Instanz ausgelagert wird.&lt;/P&gt;
&lt;P&gt;Dies könnte so aussehen:&lt;/P&gt;
&lt;P&gt;&lt;code&gt;&lt;span style="color: Black;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;public&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;static&lt;/span&gt; WorldBase ConstructMyWorld()&lt;br /&gt;{&lt;br /&gt;                &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;return&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;new&lt;/span&gt; World();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;WorldBase world &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; ConstructMyWorld();&lt;br /&gt;world.SayHello();&lt;/span&gt;&lt;/code&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;So ist das Problem auf einfachste Art gelöst.&lt;/P&gt;
&lt;P&gt;Zusammenfassung:&lt;BR&gt;Das Problem war die Abhängigkeit auf die konkrete Klasse "World".&lt;BR&gt;Wenn wir anstelle von der Klasse "World", "SecondWorld" benutzen wollen, brauchen wir das jetzt nur noch an der Stelle "return new World" zu ändern, in "return new SecondWorld();"&lt;/P&gt;
&lt;P&gt;Wie häufig wir die Fabrikmethode "ConstructMyWorld" benutzen, bleibt uns überlassen.&lt;BR&gt;Die Stelle bleibt, ein Ort der Änderung.&lt;/P&gt;
&lt;P&gt;Das wird möglich indem wir eine Abstraktion benutzen, in unserem Falle "WorldBase".&lt;BR&gt;Die konkreten Klassen "World", "SecondWorld" müssen von aussen gleich aussehen (Implementieren die gleiche Abstraktion), können allerdings anders implementiert sein.&lt;/P&gt;
&lt;P&gt;Die Angabe des Typs "WorldBase" braucht bei der Zuweisung am Ort des Benutzens angegeben werden, sowie auch als Rückgabetyp der Fabrikmethode.&lt;/P&gt;
&lt;P&gt;Das war die einfachste Möglichkeit der Umkehrung per Fabrikmethode.&lt;/P&gt;
&lt;P&gt;Die Frage bleibt evt. noch: Wieso Umkehrung?&lt;/P&gt;
&lt;P&gt;Am Anfang hatte die Zuweisung am Ort des Benutzens die Kontrolle über den konkreten Typen, sie gab also an, was sie möchte.&lt;/P&gt;
&lt;P&gt;Jetzt liegt die Kontrolle _in_ der Fabrikmethode. Der Ort des Benutzens weiss nur, das da ein Typ zurückkommt, der aussieht wie "WorldBase", nicht mehr und nicht weniger.&lt;/P&gt;
&lt;P&gt;Am Schluss noch der vollständige (vermutlich nicht sofort lauffähige = Pseudo) Code:&lt;/P&gt;
&lt;P&gt;&lt;code&gt;&lt;span style="color: Black;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;public&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;class&lt;/span&gt; ConsoleApplication&lt;br /&gt;{&lt;br /&gt;                &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;public&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;static&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;void&lt;/span&gt; Main()&lt;br /&gt;                {&lt;br /&gt;                                WorldBase world &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; ConstructMyWorld();&lt;br /&gt;                                world.SayHello();&lt;br /&gt;                }&lt;br /&gt;&lt;br /&gt;                &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;public&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;static&lt;/span&gt; WorldBase ConstructMyWorld()&lt;br /&gt;                {&lt;br /&gt;                                &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;return&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;new&lt;/span&gt; World();&lt;br /&gt;                }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;public&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;abstract&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;class&lt;/span&gt; WorldBase&lt;br /&gt;{&lt;br /&gt;                &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;public&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;abstract&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;void&lt;/span&gt; SayHello();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;public&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;class&lt;/span&gt; World : WorldBase&lt;br /&gt;{&lt;br /&gt;                &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;public&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;void&lt;/span&gt; SayHello()&lt;br /&gt;                {&lt;br /&gt;                               Console.WriteLine(&lt;span style="color: #666666;background-color: #e4e4e4;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;"Hello World"&lt;/span&gt;);&lt;br /&gt;                }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;public&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;class&lt;/span&gt; SecondWorld : WorldBase&lt;br /&gt;{&lt;br /&gt;                &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;public&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;void&lt;/span&gt; SayHello()&lt;br /&gt;                {&lt;br /&gt;                               Console.WriteLine(&lt;span style="color: #666666;background-color: #e4e4e4;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;"Hello SecondWorld"&lt;/span&gt;);&lt;br /&gt;                }&lt;br /&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/P&gt;&lt;img src="http://www.aspnetzone.de/aggbug.aspx?PostID=220259" width="1" height="1"&gt;</description></item><item><title>See# Party - Die Community Konferenz am Bodensee</title><link>http://www.aspnetzone.de/blogs/peterbucher/archive/2010/08/19/see-party-die-community-konferenz-am-bodensee.aspx</link><pubDate>Thu, 19 Aug 2010 15:07:00 GMT</pubDate><guid isPermaLink="false">ce930855-ae9b-4fa4-8077-06a76071cc6a:218553</guid><dc:creator>Peter Bucher</dc:creator><slash:comments>0</slash:comments><comments>http://www.aspnetzone.de/blogs/peterbucher/comments/218553.aspx</comments><wfw:commentRss>http://www.aspnetzone.de/blogs/peterbucher/commentrss.aspx?PostID=218553</wfw:commentRss><description>&lt;P&gt;Jürgen Gutsch und ich haben bekanntlich ja den grenzübergreifenden (CH / DE)&amp;nbsp;&lt;A href="http://dotnetkk.de/"&gt;.NET Stammtisch Konstanz-Kreuzlingen&lt;/A&gt; gegründet.&lt;BR&gt;Ich bin leider nicht mehr dort lokalisiert aber natürlich immer noch sehr daran interessiert, das es gut läuft.&lt;/P&gt;
&lt;P&gt;Das neue Team rund um Jürgen Gutsch und Tilo Schinke hat eine riesen Arbeit geleistet und stellte in kurzer Zeit eine Konferenz in Kreuzlingen (CH) auf die Beine.&lt;BR&gt;Dabei sind sehr viele bekannte Sprecher, wie beispielsweise Stefan Lieser, Albert Weinert, Ken Cascada uvm, die sehr interessante Vorträge halten werden.&lt;/P&gt;
&lt;P&gt;Offizielle Ankündigung:&lt;/P&gt;
&lt;DIV class=Quotes&gt;
&lt;P&gt;Der &lt;A href="http://dotnetkk.de/"&gt;.NET-Stammtisch Konstanz-Kreuzlingen&lt;/A&gt; veranstaltet am 28.08.2010 die .NET-Community Konferenz&amp;nbsp; &lt;A href="http://www.seesharpparty.de/$"&gt;See# Party&lt;/A&gt; in Kreuzlingen am Bodensee. Eine Konferenz von und für die .NET Community und interessierte in der Schweiz und Deutschland.&lt;/P&gt;
&lt;P&gt;Diese Konferenz bietet den Teilnehmern viele interessante Vorträge aus dem .NET Umfeld, vorgetragen von Entwicklern aus der .NET-Community.&lt;/P&gt;
&lt;P&gt;Die&amp;nbsp;&lt;A href="http://www.seesharpparty.de/de/Anmeldung/page38401.htm"&gt;Anmeldung&lt;/A&gt; für bis zu 250 Teilnehmer startet in Kürze&lt;/P&gt;
&lt;P&gt;Ziel ist es am Bodensee, für die Schweiz und Deutschland, eine Konferenz von und für die .NET Community und interessierte zu Veranstalten.&lt;/P&gt;
&lt;P&gt;Die&amp;nbsp;&lt;A href="http://www.seesharpparty.de/"&gt;See# Party&lt;/A&gt; soll auch eine günstige und nahe alternative zu den großen Konferenzen darstellen. &lt;/P&gt;&lt;/DIV&gt;
&lt;P&gt;&lt;STRONG&gt;Es würde mich freuen, euch dort zu sehen! :-)&lt;/STRONG&gt;&lt;/P&gt;&lt;img src="http://www.aspnetzone.de/aggbug.aspx?PostID=218553" width="1" height="1"&gt;</description><category domain="http://www.aspnetzone.de/blogs/peterbucher/archive/tags/Community/default.aspx">Community</category><category domain="http://www.aspnetzone.de/blogs/peterbucher/archive/tags/dotnetkk.de/default.aspx">dotnetkk.de</category><category domain="http://www.aspnetzone.de/blogs/peterbucher/archive/tags/Ank_26002300_252_3B00_ndigungen/default.aspx">Ank&amp;#252;ndigungen</category><category domain="http://www.aspnetzone.de/blogs/peterbucher/archive/tags/See_2300_%20Party/default.aspx">See# Party</category><category domain="http://www.aspnetzone.de/blogs/peterbucher/archive/tags/ssp2010/default.aspx">ssp2010</category></item><item><title>LightCore 1.4 Release</title><link>http://www.aspnetzone.de/blogs/peterbucher/archive/2010/07/25/lightcore-1-4-release.aspx</link><pubDate>Sun, 25 Jul 2010 06:44:00 GMT</pubDate><guid isPermaLink="false">ce930855-ae9b-4fa4-8077-06a76071cc6a:218081</guid><dc:creator>Peter Bucher</dc:creator><slash:comments>1</slash:comments><comments>http://www.aspnetzone.de/blogs/peterbucher/comments/218081.aspx</comments><wfw:commentRss>http://www.aspnetzone.de/blogs/peterbucher/commentrss.aspx?PostID=218081</wfw:commentRss><description>&lt;IMG align=right src="http://peterbucher.ch/img/core/lightcore_logo.png"&gt; 
&lt;P&gt;&lt;STRONG&gt;*Update:&lt;/STRONG&gt; Die Quellcode Lizenz von LightCore wurde auf MS-PL umgestellt und die aktuelle Version ist inzwischen 1.4.1. 
&lt;P&gt;Es hat eine Weile gedauert, doch nun ist es soweit: &lt;STRONG&gt;LightCore ist in der Version 1.4 verfügbar&lt;/STRONG&gt; und die &lt;STRONG&gt;Website glänzt &lt;/STRONG&gt;mit &lt;STRONG&gt;neuem Design und Inhalt&lt;/STRONG&gt;.&lt;/P&gt;
&lt;P&gt;Mit diesem Release wurden bekannte Fehler aus der Version 1.0 behoben, intern viel verändert und bietet natürlich auch neue Features.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Silverlight&lt;/STRONG&gt; &lt;STRONG&gt;3.0&lt;/STRONG&gt; und &lt;STRONG&gt;Compact Framework&lt;/STRONG&gt; &lt;STRONG&gt;3.5&lt;/STRONG&gt; Unterstützung wurden gefordert, diese Forderung wurde umgesetzt und&amp;nbsp;zusätzlich findet sich jetzt auch eine &lt;STRONG&gt;.NET 4.0&lt;/STRONG&gt; Variante, die den neuen &lt;STRONG&gt;Lazy&amp;lt;T&amp;gt;&lt;/STRONG&gt;-Typ integriert.&lt;/P&gt;
&lt;P&gt;Unter anderem wurde folgendes geändert:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Interne Änderungen, mehr UnitTests, Optimierungen, Fehlerbehebungen. 
&lt;LI&gt;Open Generic Unterstützung per XML-Registrierung. 
&lt;LI&gt;&lt;STRONG&gt;Unterstützung von&lt;/STRONG&gt; mehreren, &lt;STRONG&gt;typisierten Argumenten&lt;/STRONG&gt; pro Registration mit XML oder per Code. 
&lt;LI&gt;Bessere Fehlermeldungen und Fehlerbehandlung. 
&lt;LI&gt;Viel mehr Features durch die RegistrationSources, bspw. Factory- oder Array-RegistrationSource. 
&lt;LI&gt;Unterstützung von ASP.NET MVC 2.0. 
&lt;LI&gt;Property Injection Performance verbessert. 
&lt;LI&gt;Benannte Registrierungen sind ab dieser Version nicht mehr unterstützt. 
&lt;LI&gt;Compile- und Laufzeit-Argumente in verschiedener Form (XML, anonymer Typ, IDictionary&amp;lt;string, object&amp;gt;,Argument beim Resolve Aufruf).&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;LightCore ist unter&amp;nbsp;&lt;A href="http://lightcore.ch/"&gt;http://lightcore.ch/&lt;/A&gt; erreichbar.&lt;/P&gt;
&lt;P&gt;An&amp;nbsp;dieser Stelle möchte ich &lt;A href="http://www.aspnetzone.de/blogs/juergengutsch/"&gt;Jürgen Gutsch&lt;/A&gt;, &lt;A href="http://webenliven-space.de/dotnetblog/"&gt;Gregor Biswanger&lt;/A&gt;, &lt;A href="http://dennisbischof.wordpress.com/"&gt;Dennis Bischof&lt;/A&gt;, &lt;A href="http://www.goloroden.de/"&gt;Golo Roden&lt;/A&gt; und &lt;A href="http://www.aspnetzone.de/blogs/robertobez/"&gt;Roberto Bez&lt;/A&gt; danken, die mir während der Entwicklung und für die Dokumentation von LightCore stets mit Rat und Tat zur Seite stehen.&lt;/P&gt;
&lt;DIV class=Quotes&gt;
&lt;H4&gt;Was kostet LightCore?&lt;/H4&gt;
&lt;P&gt;Die Binaries von LightCore dürfen in jeglicher Art von Projekten (privat, kommerziell, ...) &lt;STRONG&gt;kostenlos&lt;/STRONG&gt; genutzt werden.&lt;BR&gt;Der Quellcode von LightCore steht unter der &lt;A href="http://www.microsoft.com/opensource/licenses.mspx"&gt;MS-PL&lt;/A&gt;-Lizenz. &lt;/P&gt;&lt;/DIV&gt;&lt;img src="http://www.aspnetzone.de/aggbug.aspx?PostID=218081" width="1" height="1"&gt;</description><category domain="http://www.aspnetzone.de/blogs/peterbucher/archive/tags/LightCore/default.aspx">LightCore</category><category domain="http://www.aspnetzone.de/blogs/peterbucher/archive/tags/Changelog/default.aspx">Changelog</category><category domain="http://www.aspnetzone.de/blogs/peterbucher/archive/tags/Download/default.aspx">Download</category><category domain="http://www.aspnetzone.de/blogs/peterbucher/archive/tags/Release/default.aspx">Release</category><category domain="http://www.aspnetzone.de/blogs/peterbucher/archive/tags/1.4/default.aspx">1.4</category></item><item><title>Blogroll geräumt</title><link>http://www.aspnetzone.de/blogs/peterbucher/archive/2010/07/12/blogroll-ger-umt.aspx</link><pubDate>Mon, 12 Jul 2010 15:21:00 GMT</pubDate><guid isPermaLink="false">ce930855-ae9b-4fa4-8077-06a76071cc6a:217929</guid><dc:creator>Peter Bucher</dc:creator><slash:comments>0</slash:comments><comments>http://www.aspnetzone.de/blogs/peterbucher/comments/217929.aspx</comments><wfw:commentRss>http://www.aspnetzone.de/blogs/peterbucher/commentrss.aspx?PostID=217929</wfw:commentRss><description>&lt;P&gt;Ab und zu überprüfe ich die Links in meinem Blogroll.&lt;BR&gt;Dabei kann es sein, das die Seite ganz weg ist, oder der Link inzwischen falsch ist.&lt;/P&gt;
&lt;P&gt;Da ist eine Nachforschung und Ersetzung des Links relativ einfach.&lt;BR&gt;Und alle anderen die jetzt rausgeflogen sind, hatten entweder keinen Blogroll oder&lt;BR&gt;mein Blog nicht mehr verlinkt.&lt;/P&gt;
&lt;P&gt;Wenn ich jemand ohne Verschulden rausgeworfen habe, oder jemand denkt, er gehört noch rein,&lt;BR&gt;dann bitte melden.&lt;/P&gt;
&lt;P&gt;Am einfachsten hier: &lt;A href="http://www.peterbucher.ch/kontakt.aspx"&gt;http://www.peterbucher.ch/kontakt.aspx&lt;/A&gt;&lt;/P&gt;&lt;img src="http://www.aspnetzone.de/aggbug.aspx?PostID=217929" width="1" height="1"&gt;</description><category domain="http://www.aspnetzone.de/blogs/peterbucher/archive/tags/Blog/default.aspx">Blog</category><category domain="http://www.aspnetzone.de/blogs/peterbucher/archive/tags/Links/default.aspx">Links</category><category domain="http://www.aspnetzone.de/blogs/peterbucher/archive/tags/Blogroll/default.aspx">Blogroll</category></item><item><title>Anonymen Zugriff für VisualSVN Server konfigurieren</title><link>http://www.aspnetzone.de/blogs/peterbucher/archive/2010/06/24/anonymen-zugriff-f-r-visualsvn-server-konfigurieren.aspx</link><pubDate>Thu, 24 Jun 2010 10:50:00 GMT</pubDate><guid isPermaLink="false">ce930855-ae9b-4fa4-8077-06a76071cc6a:217772</guid><dc:creator>Peter Bucher</dc:creator><slash:comments>0</slash:comments><comments>http://www.aspnetzone.de/blogs/peterbucher/comments/217772.aspx</comments><wfw:commentRss>http://www.aspnetzone.de/blogs/peterbucher/commentrss.aspx?PostID=217772</wfw:commentRss><description>&lt;P&gt;Schon seit längerem betreibe ich einen SVN-Server mithilfe der kostenlosen Software &lt;A href="http://www.visualsvn.com/server/"&gt;VisualSVN Server&lt;/A&gt;.&lt;BR&gt;Leider kann standardmässig kein anonymer Zugriff (Ohne Logindaten) genutzt werden, es braucht mindestens einen Namen bspw. "guest" oder "anonymous".&lt;/P&gt;
&lt;P&gt;Mit folgender Anleitung von Rick Strahl ist es einfach möglich, nach einer kleiner Änderung in der Konfiguration dem Spezialbenutzer "Everyone" Rechte zu geben. Das gilt dann für Clients, die keine Logindaten angeben.&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A href="http://ferventcoder.com/archive/2008/10/04/enhancing-visual-svn-to-allow-anonymous-access.aspx"&gt;http://ferventcoder.com/archive/2008/10/04/enhancing-visual-svn-to-allow-anonymous-access.aspx&lt;/A&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;img src="http://www.aspnetzone.de/aggbug.aspx?PostID=217772" width="1" height="1"&gt;</description><category domain="http://www.aspnetzone.de/blogs/peterbucher/archive/tags/anonymous%20access/default.aspx">anonymous access</category><category domain="http://www.aspnetzone.de/blogs/peterbucher/archive/tags/SVN/default.aspx">SVN</category><category domain="http://www.aspnetzone.de/blogs/peterbucher/archive/tags/Anonymer%20Zugriff/default.aspx">Anonymer Zugriff</category><category domain="http://www.aspnetzone.de/blogs/peterbucher/archive/tags/VisualSVN%20Server/default.aspx">VisualSVN Server</category></item><item><title>Office 2010 installiert und Visual Studio 2008 friert ein?</title><link>http://www.aspnetzone.de/blogs/peterbucher/archive/2010/06/20/office-2010-installiert-und-visual-studio-2008-friert-ein.aspx</link><pubDate>Sun, 20 Jun 2010 20:38:00 GMT</pubDate><guid isPermaLink="false">ce930855-ae9b-4fa4-8077-06a76071cc6a:217730</guid><dc:creator>Peter Bucher</dc:creator><slash:comments>0</slash:comments><comments>http://www.aspnetzone.de/blogs/peterbucher/comments/217730.aspx</comments><wfw:commentRss>http://www.aspnetzone.de/blogs/peterbucher/commentrss.aspx?PostID=217730</wfw:commentRss><description>&lt;P&gt;Nebenbei habe ich letztens Office 2010 installiert.&lt;BR&gt;Als ich dann wieder einmal Visual Studio 2008 benutzte, blieb die Anwendung im ASPX-Editor komplett hängen.&lt;/P&gt;
&lt;P&gt;Es musste der Prozess abgeschossen werden, um VS überhaupt beenden zu können.&lt;BR&gt;Mein Verdacht lag zuerst bei Resharper, was sich dann aber als falsch herausgestellt hat.&lt;/P&gt;
&lt;P&gt;Bei mir hat die Lösung mit dem Reparieren von den "Web Authoring Components" geholfen:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/b/webdevtools/archive/2010/04/19/upgrade-or-uninstall-of-office-2007-might-cause-vs-2008-web-designer-to-hang.aspx"&gt;http://blogs.msdn.com/b/webdevtools/archive/2010/04/19/upgrade-or-uninstall-of-office-2007-might-cause-vs-2008-web-designer-to-hang.aspx&lt;/A&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;img src="http://www.aspnetzone.de/aggbug.aspx?PostID=217730" width="1" height="1"&gt;</description><category domain="http://www.aspnetzone.de/blogs/peterbucher/archive/tags/Tipps/default.aspx">Tipps</category><category domain="http://www.aspnetzone.de/blogs/peterbucher/archive/tags/Fehler/default.aspx">Fehler</category><category domain="http://www.aspnetzone.de/blogs/peterbucher/archive/tags/Visual%20Studio%202008/default.aspx">Visual Studio 2008</category><category domain="http://www.aspnetzone.de/blogs/peterbucher/archive/tags/Einfrieren/default.aspx">Einfrieren</category><category domain="http://www.aspnetzone.de/blogs/peterbucher/archive/tags/Office%202010/default.aspx">Office 2010</category></item><item><title>Windows Photo Gallery Gelbstich im Hintergrund bei diversen TFT Monitoren</title><link>http://www.aspnetzone.de/blogs/peterbucher/archive/2010/03/30/windows-photo-gallery-gelbstich-im-hintergrund-bei-diversen-tft-monitoren.aspx</link><pubDate>Tue, 30 Mar 2010 17:59:12 GMT</pubDate><guid isPermaLink="false">ce930855-ae9b-4fa4-8077-06a76071cc6a:216650</guid><dc:creator>Peter Bucher</dc:creator><slash:comments>2</slash:comments><comments>http://www.aspnetzone.de/blogs/peterbucher/comments/216650.aspx</comments><wfw:commentRss>http://www.aspnetzone.de/blogs/peterbucher/commentrss.aspx?PostID=216650</wfw:commentRss><description>&lt;p&gt;Wer im Hintergrund von Windows Photo Gallery (Foto Vorschau von Windows) einen Gelbstich im Hintergrund hat, kann dies durch ein anderes Farbprofil ausbessern.&lt;/p&gt;  &lt;p&gt;Speziell Samsung Monitore scheinen dafür anfällig zu sein. Bei mir hat die erste Lösung geklappt:&lt;/p&gt;  &lt;p&gt;Erster Workaround:&lt;/p&gt;  &lt;div class="Quotes"&gt;The first workaround is by removing any existing ICC or WCS color profiles that are been associated with all display devices or monitors. Else, you can also try to change the default color profile for your system’s monitor to sRGB IEC61966-2.1, simply by clicking on Add, and then select sRGB IEC61966-2.1 from the list of profiles installed on system. After adding, click Set as Default Profile button. Exit from all dialogs and reboot your computer, and the color problem on Windows Photo Gallery is fixed.&lt;/div&gt;  &lt;p&gt;Zweiter Workaround:&lt;/p&gt;  &lt;div class="Quotes"&gt;If your system doesn’t have sRGB IEC61966-2.1 profile under the ICC Profiles, you can download the color profile from Adobe. Unpack the zip file, the right click on each of the .icc files in the RGB Profiles and CMYK Profiles folders (or simply just the one you need to use) and click “Install Profile” on context menu to install the color profile to system. &lt;/div&gt;  &lt;p&gt;Quelle: &lt;a href="http://www.mydigitallife.info/2007/07/11/windows-vista-photo-gallery-yellow-tint-background-problem/"&gt;mydigitallife.info&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.aspnetzone.de/aggbug.aspx?PostID=216650" width="1" height="1"&gt;</description><category domain="http://www.aspnetzone.de/blogs/peterbucher/archive/tags/Gelbstich/default.aspx">Gelbstich</category><category domain="http://www.aspnetzone.de/blogs/peterbucher/archive/tags/Windows%20Photo%20Gallery/default.aspx">Windows Photo Gallery</category><category domain="http://www.aspnetzone.de/blogs/peterbucher/archive/tags/Background/default.aspx">Background</category><category domain="http://www.aspnetzone.de/blogs/peterbucher/archive/tags/TFT/default.aspx">TFT</category><category domain="http://www.aspnetzone.de/blogs/peterbucher/archive/tags/Hintergrund/default.aspx">Hintergrund</category><category domain="http://www.aspnetzone.de/blogs/peterbucher/archive/tags/Samsung/default.aspx">Samsung</category></item><item><title>Abstraktion</title><link>http://www.aspnetzone.de/blogs/peterbucher/archive/2010/03/01/abstraktion.aspx</link><pubDate>Mon, 01 Mar 2010 08:37:00 GMT</pubDate><guid isPermaLink="false">ce930855-ae9b-4fa4-8077-06a76071cc6a:216776</guid><dc:creator>Peter Bucher</dc:creator><slash:comments>2</slash:comments><comments>http://www.aspnetzone.de/blogs/peterbucher/comments/216776.aspx</comments><wfw:commentRss>http://www.aspnetzone.de/blogs/peterbucher/commentrss.aspx?PostID=216776</wfw:commentRss><description>&lt;P&gt;Am 13. Oktober 2008 haben &lt;A href="http://www.des-eisbaeren-blog.de/"&gt;Golo Roden&lt;/A&gt; und ich unter dem Titel &lt;A href="http://www.aspnetzone.de/blogs/peterbucher/archive/2008/10/13/noch-fragen-roden-ja-bucher.aspx"&gt;Noch Fragen, Roden? Ja, Bucher!&lt;/A&gt; angekündigt, jeweils zum ersten eines jeden Monats einen Kommentar zu einem vorab gemeinsam gewählten Thema verfassen zu wollen.&lt;/P&gt;
&lt;P&gt;Bisher sind in dieser Reihe folgende Kommentare erschienen: &lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;EM&gt;1. Februar 2010: &lt;A href="http://www.aspnetzone.de/blogs/peterbucher/archive/2010/02/01/felder-vs-eigenschaften.aspx"&gt;Felder vs Eigenschaften&lt;/A&gt;&lt;/EM&gt; 
&lt;LI&gt;&lt;EM&gt;1. Januar 2010: &lt;A href="http://aspnetzone.de/blogs/peterbucher/archive/2010/01/01/this-oder-kein-this.aspx"&gt;this oder kein this&lt;/A&gt;&lt;/EM&gt; 
&lt;LI&gt;&lt;EM&gt;1. Dezember 2009: &lt;A href="http://www.aspnetzone.de/blogs/peterbucher/archive/2009/12/01/reflection-fluch-oder-segen.aspx"&gt;Reflection – Fluch oder Segen?&lt;/A&gt;&lt;/EM&gt; 
&lt;LI&gt;&lt;EM&gt;1. November 2009: &lt;A href="http://www.aspnetzone.de/blogs/peterbucher/archive/2009/11/01/wieviel-sinn-machen-unittests.aspx"&gt;Wieviel Sinn machen Unittests?&lt;/A&gt;&lt;/EM&gt; 
&lt;LI&gt;&lt;EM&gt;1. Oktober 2009: Vererben oder aggregieren?&lt;/EM&gt; 
&lt;LI&gt;1. September 2009: &lt;A href="http://www.aspnetzone.de/blogs/peterbucher/archive/2009/09/01/alles-var-oder-nicht.aspx"&gt;Alles var – oder nicht?&lt;/A&gt; 
&lt;LI&gt;1. August 2009: &lt;A href="http://www.aspnetzone.de/blogs/peterbucher/archive/2009/08/01/c-oder-vb-welche-sprache-soll-ich-lernen.aspx"&gt;C# oder VB: Welche Sprache soll ich lernen?&lt;/A&gt; 
&lt;LI&gt;1. Juli 2009: &lt;A href="http://www.aspnetzone.de/blogs/peterbucher/archive/2009/07/01/prim-rschl-ssel-guid-vs-identity.aspx"&gt;Primärschlüssel: GUID vs Identity&lt;/A&gt; 
&lt;LI&gt;1. Juni 2009: &lt;A href="http://www.aspnetzone.de/blogs/peterbucher/archive/2009/06/01/heisst-die-zukunft-ria.aspx"&gt;Heißt die Zukunft RIA?&lt;/A&gt; 
&lt;LI&gt;1. Mai 2009: &lt;A href="http://www.aspnetzone.de/blogs/peterbucher/archive/2009/05/01/woran-erkennt-man-einen-guten-entwickler.aspx"&gt;Woran erkennt man einen guten Entwickler?&lt;/A&gt; 
&lt;LI&gt;1. April 2009: &lt;A href="http://www.aspnetzone.de/blogs/peterbucher/archive/2009/04/01/interfaces-vs-abstrakte-klassen.aspx"&gt;Interfaces vs abstrakte Klassen&lt;/A&gt; 
&lt;LI&gt;1. März 2009: &lt;A href="http://www.aspnetzone.de/blogs/peterbucher/archive/2009/03/01/sinn-und-zweck-von-aop.aspx"&gt;Sinn und Zweck von AOP&lt;/A&gt; 
&lt;LI&gt;1. Februar 2009: &lt;A href="http://www.aspnetzone.de/blogs/peterbucher/archive/2009/02/01/die-forderung-nach-softwarequalit-t.aspx"&gt;Die Forderung nach Softwarequalität&lt;/A&gt; 
&lt;LI&gt;1. Januar 2009: &lt;A href="http://www.aspnetzone.de/blogs/peterbucher/archive/2009/01/01/soa-vs-woa.aspx"&gt;SOA vs WOA&lt;/A&gt; 
&lt;LI&gt;1. Dezember 2008: &lt;A href="http://www.aspnetzone.de/blogs/peterbucher/archive/2008/12/01/dynamic-language-runtime-net-quo-vadis.aspx"&gt;Dynamic Language Runtime: .NET, quo vadis?&lt;/A&gt; &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Heute, am 1. März 2010, ist es nun wieder so weit, und unser Thema für diesen Monat lautet: &lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;EM&gt;Abstraktion&lt;/EM&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;So wohl Golo wie auch ich haben uns unabhängig voneinander im Vorfeld unsere Gedanken gemacht, wie wir diesem Thema gegenüberstehen. Außerdem nimmt diesen Monat auch &lt;A href="http://www.aspnetzone.de/blogs/robertobez/"&gt;Roberto Bez&lt;/A&gt; an unserem Streitgespräch teil.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://www.des-eisbaeren-blog.de/post/2010/03/01/Abstraktion.aspx"&gt;Golos&lt;/A&gt; und &lt;A href="http://www.aspnetzone.de/blogs/robertobez/archive/2010/03/01/Software-Abstraktion.aspx"&gt;Robertos&lt;/A&gt; Kommentare finden sich zeitgleich in den entsprechenden Blogs, folgend nun mein Kommentar zu diesem Thema:&lt;/P&gt;
&lt;P&gt;Der Begriff “Abstraktion” wird in vielen möglichen Bereichen genutzt, sei dies Kunst, Psychologie, Philosophie, Mathematik oder sogar in der Sprachwissenschaft.&lt;/P&gt;
&lt;P&gt;Abstraktion hat in jedem Bereich die gleiche Bedeutung, jedoch in einem jeweils anderen Kontext.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Ein Beispiel aus der Psychologie:&lt;/P&gt;
&lt;P&gt;In einem Leben wird der Mensch mit sehr viel Wissen, Tatsachen und Situationen auseinandergesetzt. &lt;BR&gt;Wenn der Mensch alles im Kopf behält und das auch im Leben nutzt, wäre das Leben um einiges komplizierter.&lt;/P&gt;
&lt;P&gt;Bspw. am Mittagstisch, entweder “&lt;EM&gt;Gib mir bitte die Butter&lt;/EM&gt;” vs. “&lt;EM&gt;Gib mir bitte die Laco Butter mit 5% Fettanteil, die Gestern Aktion war&lt;/EM&gt;.”&lt;/P&gt;
&lt;P&gt;Bei zweiterem müsste der Gegenüber wohl zuerst mal überlegen, was überhaupt gefordert ist oder ob es evt. sogar ein Scherz ist. &lt;BR&gt;Danach schauen ob all die Eigenschaften übereinstimmen und dann schlussendlich die Butter bringen oder eine Antwort geben.&lt;/P&gt;
&lt;P&gt;Ihr könnt es schon denken: Das Leben wäre viel zu kompliziert. &lt;BR&gt;Mit ersterem Satz weiss jedes Kind was gemeint ist und die Komplexität nimmt rapide ab.&lt;/P&gt;
&lt;P&gt;Man kann schlussendlich immer noch sagen: “Bitte gib mir die light Butter” / “Bitte gib mir die normale Butter”, wenn eine solche Unterscheidung notwendig ist, wenn zwei Butter vorhanden sind.&lt;/P&gt;
&lt;P&gt;Das Beispiel zu Kunst auf Wikipedia ist auch sehr interessant: &lt;A title=http://de.wikipedia.org/wiki/Abstraktion#Kunst href="http://de.wikipedia.org/wiki/Abstraktion#Kunst"&gt;http://de.wikipedia.org/wiki/Abstraktion#Kunst&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Es geht also um die Generalisierung, um das weglassen von Details, wobei genau dasselbe erreicht werden kann. &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;In der Software-Entwicklung gibt es zum einen die Objektorientierte Programmierung und zum anderen Sprachkonstrukte für Generalisierung. &lt;BR&gt;Auch wenn es wohl einige nicht daran denken, weil sie zufest in abstrakte Klassen und Interfaces eingefahren sind: Auch konkrete Klassen sind Abstraktionen.&lt;/P&gt;
&lt;P&gt;Sie verbergen Details (Datenkapselung), die ja eigentlich dazugehören, aber den Client nicht interessiert, sowie einen Schutz darstellt, wenn das Klasse später noch geändert werden muss, ohne das der Clientcode bricht.&lt;/P&gt;
&lt;P&gt;Auch bei konkreten Klassen gibt es die Generalisierung und Spezialisierung. “String” ist eine Spezialisierung vom Typ “object” und “Person” eine Generalisierung von “PoliceOfficer”.&lt;/P&gt;
&lt;P&gt;Zusätzlich zu den Möglichkeiten der Objektorientierung gibt es in C# zwei Sprachkonstrukte, um die Nutzung von Abstraktion noch effektiver zu nutzen.&lt;/P&gt;
&lt;P&gt;Abstrakte Klassen und Interfaces, mehr dazu könnt ihr in einem frühreren Streitgespräch lesen:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A title=http://www.aspnetzone.de/blogs/peterbucher/archive/2009/04/01/interfaces-vs-abstrakte-klassen.aspx href="http://www.aspnetzone.de/blogs/peterbucher/archive/2009/04/01/interfaces-vs-abstrakte-klassen.aspx"&gt;http://www.aspnetzone.de/blogs/peterbucher/archive/2009/04/01/interfaces-vs-abstrakte-klassen.aspx&lt;/A&gt; &lt;/LI&gt;&lt;/UL&gt;&lt;img src="http://www.aspnetzone.de/aggbug.aspx?PostID=216776" width="1" height="1"&gt;</description><category domain="http://www.aspnetzone.de/blogs/peterbucher/archive/tags/Streitgespr_26002300_228_3B00_ch/default.aspx">Streitgespr&amp;#228;ch</category><category domain="http://www.aspnetzone.de/blogs/peterbucher/archive/tags/Generalisierung/default.aspx">Generalisierung</category><category domain="http://www.aspnetzone.de/blogs/peterbucher/archive/tags/Spezialisierung/default.aspx">Spezialisierung</category><category domain="http://www.aspnetzone.de/blogs/peterbucher/archive/tags/Abstraktion/default.aspx">Abstraktion</category></item><item><title>Felder vs Eigenschaften</title><link>http://www.aspnetzone.de/blogs/peterbucher/archive/2010/02/01/felder-vs-eigenschaften.aspx</link><pubDate>Mon, 01 Feb 2010 08:37:00 GMT</pubDate><guid isPermaLink="false">ce930855-ae9b-4fa4-8077-06a76071cc6a:216400</guid><dc:creator>Peter Bucher</dc:creator><slash:comments>3</slash:comments><comments>http://www.aspnetzone.de/blogs/peterbucher/comments/216400.aspx</comments><wfw:commentRss>http://www.aspnetzone.de/blogs/peterbucher/commentrss.aspx?PostID=216400</wfw:commentRss><description>&lt;P&gt;Am 13. Oktober 2008 haben &lt;A href="http://www.des-eisbaeren-blog.de/"&gt;&lt;STRONG&gt;&lt;FONT color=#006bad&gt;Golo Roden&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/A&gt; und ich unter dem Titel &lt;A href="http://www.aspnetzone.de/blogs/peterbucher/archive/2008/10/13/noch-fragen-roden-ja-bucher.aspx"&gt;&lt;STRONG&gt;&lt;FONT color=#006bad&gt;Noch Fragen, Roden? Ja, Bucher!&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/A&gt; angekündigt, jeweils zum ersten eines jeden Monats einen Kommentar zu einem vorab gemeinsam gewählten Thema verfassen zu wollen.&lt;/P&gt;
&lt;P&gt;Bisher sind in dieser Reihe folgende Kommentare erschienen: &lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;EM&gt;1. Januar 2010: &lt;A href="http://www.aspnetzone.de/blogs/peterbucher/archive/2010/01/01/this-oder-kein-this.aspx"&gt;this oder kein this&lt;/A&gt;&lt;/EM&gt; 
&lt;LI&gt;&lt;EM&gt;1. Dezember 2009: &lt;A href="http://www.aspnetzone.de/blogs/peterbucher/archive/2009/12/01/reflection-fluch-oder-segen.aspx"&gt;&lt;STRONG&gt;&lt;FONT color=#006bad&gt;Reflection – Fluch oder Segen?&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/A&gt;&lt;/EM&gt; 
&lt;LI&gt;&lt;EM&gt;1. November 2009: &lt;A href="http://www.aspnetzone.de/blogs/peterbucher/archive/2009/11/01/wieviel-sinn-machen-unittests.aspx"&gt;&lt;STRONG&gt;&lt;FONT color=#006bad&gt;Wieviel Sinn machen Unittests?&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/A&gt;&lt;/EM&gt; 
&lt;LI&gt;&lt;EM&gt;1. Oktober 2009: Vererben oder aggregieren?&lt;/EM&gt; 
&lt;LI&gt;1. September 2009: &lt;A href="http://www.aspnetzone.de/blogs/peterbucher/archive/2009/09/01/alles-var-oder-nicht.aspx"&gt;&lt;STRONG&gt;&lt;FONT color=#006bad&gt;Alles var – oder nicht?&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/A&gt; 
&lt;LI&gt;1. August 2009: &lt;A href="http://www.aspnetzone.de/blogs/peterbucher/archive/2009/08/01/c-oder-vb-welche-sprache-soll-ich-lernen.aspx"&gt;&lt;STRONG&gt;&lt;FONT color=#006bad&gt;C# oder VB: Welche Sprache soll ich lernen?&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/A&gt; 
&lt;LI&gt;1. Juli 2009: &lt;A href="http://www.aspnetzone.de/blogs/peterbucher/archive/2009/07/01/prim-rschl-ssel-guid-vs-identity.aspx"&gt;&lt;STRONG&gt;&lt;FONT color=#006bad&gt;Primärschlüssel: GUID vs Identity&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/A&gt; 
&lt;LI&gt;1. Juni 2009: &lt;A href="http://www.aspnetzone.de/blogs/peterbucher/archive/2009/06/01/heisst-die-zukunft-ria.aspx"&gt;&lt;STRONG&gt;&lt;FONT color=#006bad&gt;Heißt die Zukunft RIA?&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/A&gt; 
&lt;LI&gt;1. Mai 2009: &lt;A href="http://www.aspnetzone.de/blogs/peterbucher/archive/2009/05/01/woran-erkennt-man-einen-guten-entwickler.aspx"&gt;&lt;STRONG&gt;&lt;FONT color=#006bad&gt;Woran erkennt man einen guten Entwickler?&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/A&gt; 
&lt;LI&gt;1. April 2009: &lt;A href="http://www.aspnetzone.de/blogs/peterbucher/archive/2009/04/01/interfaces-vs-abstrakte-klassen.aspx"&gt;&lt;STRONG&gt;&lt;FONT color=#006bad&gt;Interfaces vs abstrakte Klassen&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/A&gt; 
&lt;LI&gt;1. März 2009: &lt;A href="http://www.aspnetzone.de/blogs/peterbucher/archive/2009/03/01/sinn-und-zweck-von-aop.aspx"&gt;&lt;STRONG&gt;&lt;FONT color=#006bad&gt;Sinn und Zweck von AOP&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/A&gt; 
&lt;LI&gt;1. Februar 2009: &lt;A href="http://www.aspnetzone.de/blogs/peterbucher/archive/2009/02/01/die-forderung-nach-softwarequalit-t.aspx"&gt;&lt;STRONG&gt;&lt;FONT color=#006bad&gt;Die Forderung nach Softwarequalität&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/A&gt; 
&lt;LI&gt;1. Januar 2009: &lt;A href="http://www.aspnetzone.de/blogs/peterbucher/archive/2009/01/01/soa-vs-woa.aspx"&gt;&lt;STRONG&gt;&lt;FONT color=#006bad&gt;SOA vs WOA&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/A&gt; 
&lt;LI&gt;1. Dezember 2008: &lt;A href="http://www.aspnetzone.de/blogs/peterbucher/archive/2008/12/01/dynamic-language-runtime-net-quo-vadis.aspx"&gt;&lt;STRONG&gt;&lt;FONT color=#006bad&gt;Dynamic Language Runtime: .NET, quo vadis?&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/A&gt; &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Heute, am 1. Februar 2010, ist es nun wieder so weit, und unser Thema für diesen Monat lautet: &lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;EM&gt;Felder vs Eigenschaften&lt;/EM&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P align=left&gt;So wohl&amp;nbsp;Golo wie auch ich haben uns unabhängig voneinander im Vorfeld unsere Gedanken gemacht, wie wir diesem Thema gegenüberstehen.&amp;nbsp;Golos Kommentar findet sich zeitgleich in seinem &lt;A href="http://www.des-eisbaeren-blog.de/post/2010/02/01/Felder-vs-Eigenschaften.aspx"&gt;Blog&lt;/A&gt;, folgend nun mein Kommentar zu diesem Thema:&lt;/P&gt;
&lt;P align=left&gt;An &lt;A href="http://discuss.fogcreek.com/dotnetquestions/default.asp?cmd=show&amp;amp;ixPost=5814"&gt;mehreren&lt;/A&gt; Orten &lt;A href="http://blogs.msdn.com/abhinaba/archive/2005/09/22/472706.aspx"&gt;wird&lt;/A&gt; &lt;A href="http://www.codinghorror.com/blog/2006/08/properties-vs-public-variables.html"&gt;debattiert&lt;/A&gt;, ob es nun besser sei eine öffentliche&amp;nbsp;Eigenschaft, oder&amp;nbsp;öffentliches Feld zu benutzen.&lt;BR&gt;Teilweise gehen die Meinungen Richtung &lt;A href="http://www.google.ch/url?sa=t&amp;amp;source=web&amp;amp;ct=res&amp;amp;cd=1&amp;amp;ved=0CAsQFjAA&amp;amp;url=http%3A%2F%2Fde.wikipedia.org%2Fwiki%2FKISS-Prinzip&amp;amp;rct=j&amp;amp;q=kiss&amp;amp;ei=dwCdS-ClIpPAmgP92cGfCw&amp;amp;usg=AFQjCNEwfs3z4DwYVX2PLkQm38vQMzBQ-A&amp;amp;sig2=wUH8TVpub2rvxa2-DtZOhg"&gt;KISS&lt;/A&gt; oder &lt;A href="http://de.wikipedia.org/wiki/YAGNI"&gt;YAGNI&lt;/A&gt;, was auch teilweise&amp;nbsp;nachvollziehbar war, als es noch keine automatischen Eigenschaften gab.&lt;/P&gt;
&lt;P align=left&gt;Eine Eigenschaft ist jedoch &lt;STRONG&gt;nicht dasselbe&lt;/STRONG&gt; wie ein Feld, es hat eine andere Bedeutung.&lt;BR&gt;Während ein Feld nur ein einfacher Datencontainer darstellt, also eine Variable auf Instanzebene, repräsentiert eine Eigenschaft eine Schnittstelle zu Daten jeglicher Art.&lt;BR&gt;Eine Eigenschaft kann bspw. auch Daten aus mehreren Feldern und noch einer zusätzlichen Berechnung haben.&lt;/P&gt;
&lt;P align=left&gt;Die Implementierung einer Eigenschaft kann ohne Bedenken geändert werden, ohne das ein Benutzer neu kompilieren muss, es besteht also eine binäre Kompatibilität.&lt;BR&gt;Das ist ein nicht zu unterschätzender Vorteil gegenüber Feldern, der es durchaus Wert ist, mehr Schreibarbeit und Code auf sich zu nehmen.&lt;/P&gt;
&lt;P align=left&gt;In den Framework Design Guidelines von Microsoft &lt;A href="http://msdn.microsoft.com/en-us/library/ta31s3bc(VS.71).aspx"&gt;steht&lt;/A&gt; unter anderem auch:&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P align=left&gt;&lt;EM&gt;Do not use instance fields that are public&lt;/EM&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P align=left&gt;Zu all diesen Vorteilen kommt noch hinzu, das beim Databinding explizit öffentliche Eignschaften gefordert sind.&lt;/P&gt;
&lt;P align=left&gt;Der aus meiner Sicht einzige Vorteil von öffentlichen Feldern ist Geschwindigkeit, sie sind definitiv schneller.&lt;BR&gt;Allerdings sollte sowas - nur wenn nötig&amp;nbsp;(Siehe auch &lt;A href="http://www.aspnetzone.de/blogs/juergengutsch/archive/2010/02/24/basta-tag-3-speed-freek-c-and-net.aspx"&gt;Speedfreak&lt;/A&gt;)&amp;nbsp;- auch nur in einer internen API so genutzt werden, die unter eigener Kontrolle steht.&lt;/P&gt;
&lt;P align=left&gt;Werden alle Vorteile der Eigenschaften zusammengezogen und ist keine Optimierung nötig, sollte immer eine Eigenschaft anstelle eines öffentlichen Feldes genutzt werden.&lt;/P&gt;
&lt;P align=left&gt;PS: Das Buch &lt;A href="http://www.amazon.de/Framework-Design-Guidelines-Conventions-Development/dp/0321545613/"&gt;Framework Design Guidelines&lt;/A&gt; ist sehr zu empfehlen!&lt;/P&gt;&lt;img src="http://www.aspnetzone.de/aggbug.aspx?PostID=216400" width="1" height="1"&gt;</description><category domain="http://www.aspnetzone.de/blogs/peterbucher/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://www.aspnetzone.de/blogs/peterbucher/archive/tags/Streitgespr_26002300_228_3B00_ch/default.aspx">Streitgespr&amp;#228;ch</category><category domain="http://www.aspnetzone.de/blogs/peterbucher/archive/tags/Felder/default.aspx">Felder</category><category domain="http://www.aspnetzone.de/blogs/peterbucher/archive/tags/Eigenschaften/default.aspx">Eigenschaften</category><category domain="http://www.aspnetzone.de/blogs/peterbucher/archive/tags/vs/default.aspx">vs</category></item><item><title>ASP / ASP.NET MVP 2010</title><link>http://www.aspnetzone.de/blogs/peterbucher/archive/2010/01/19/asp-asp-net-mvp-2010.aspx</link><pubDate>Tue, 19 Jan 2010 19:23:00 GMT</pubDate><guid isPermaLink="false">ce930855-ae9b-4fa4-8077-06a76071cc6a:215511</guid><dc:creator>Peter Bucher</dc:creator><slash:comments>5</slash:comments><comments>http://www.aspnetzone.de/blogs/peterbucher/comments/215511.aspx</comments><wfw:commentRss>http://www.aspnetzone.de/blogs/peterbucher/commentrss.aspx?PostID=215511</wfw:commentRss><description>&lt;IMG border=0 align=right src="http://www.aspnetzone.de/photos/peterbucher/images/173615/original.aspx"&gt; 
&lt;P&gt;Anfang Jahr erhielt ich eine Email von Microsoft, das ich für das Jahr 2010 renominiert wurde :)&lt;/P&gt;
&lt;P&gt;Das freut mich ungemein und ich möchte mich bei den Betreibern und Moderatoren von &lt;A href="http://www.aspnetzone.de/"&gt;ASP.NET Zone&lt;/A&gt; und &lt;A href="http://mycsharp.de"&gt;myCSharp&lt;/A&gt; bedanken.&lt;BR&gt;Diese Auszeichnung durfte ich jetzt schon das vierte Mal in Folge entgegennehmen, wobei 4 meine Lieblingszahl ist :)&lt;/P&gt;
&lt;P&gt;Sicherlich finde ich die Zeit auch mal in Konstanz beim .NET Stammtisch Konstanz / Kreuzlingen vorbeizuschauen und einen Vortrag zu halten.&lt;/P&gt;
&lt;P&gt;Auf ein erfolgreiches Jahr 2010!&lt;/P&gt;&lt;img src="http://www.aspnetzone.de/aggbug.aspx?PostID=215511" width="1" height="1"&gt;</description><category domain="http://www.aspnetzone.de/blogs/peterbucher/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://www.aspnetzone.de/blogs/peterbucher/archive/tags/MVP/default.aspx">MVP</category><category domain="http://www.aspnetzone.de/blogs/peterbucher/archive/tags/Microsoft/default.aspx">Microsoft</category><category domain="http://www.aspnetzone.de/blogs/peterbucher/archive/tags/Neuigkeiten/default.aspx">Neuigkeiten</category></item><item><title>this oder kein this</title><link>http://www.aspnetzone.de/blogs/peterbucher/archive/2010/01/01/this-oder-kein-this.aspx</link><pubDate>Fri, 01 Jan 2010 08:37:00 GMT</pubDate><guid isPermaLink="false">ce930855-ae9b-4fa4-8077-06a76071cc6a:216045</guid><dc:creator>Peter Bucher</dc:creator><slash:comments>1</slash:comments><comments>http://www.aspnetzone.de/blogs/peterbucher/comments/216045.aspx</comments><wfw:commentRss>http://www.aspnetzone.de/blogs/peterbucher/commentrss.aspx?PostID=216045</wfw:commentRss><description>&lt;P&gt;Am 13. Oktober 2008 haben &lt;A href="http://www.des-eisbaeren-blog.de/"&gt;Golo Roden&lt;/A&gt; und ich unter dem Titel &lt;A href="http://www.aspnetzone.de/blogs/peterbucher/archive/2008/10/13/noch-fragen-roden-ja-bucher.aspx"&gt;Noch Fragen, Roden? Ja, Bucher!&lt;/A&gt; angekündigt, jeweils zum ersten eines jeden Monats einen Kommentar zu einem vorab gemeinsam gewählten Thema verfassen zu wollen.&lt;/P&gt;
&lt;P&gt;Bisher sind in dieser Reihe folgende Kommentare erschienen: &lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;EM&gt;1. Dezember 2009: &lt;A href="http://www.aspnetzone.de/blogs/peterbucher/archive/2009/12/01/reflection-fluch-oder-segen.aspx"&gt;Reflection – Fluch oder Segen?&lt;/A&gt;&lt;/EM&gt; 
&lt;LI&gt;&lt;EM&gt;1. November 2009: &lt;A href="http://www.aspnetzone.de/blogs/peterbucher/archive/2009/11/01/wieviel-sinn-machen-unittests.aspx"&gt;Wieviel Sinn machen Unittests?&lt;/A&gt;&lt;/EM&gt; 
&lt;LI&gt;&lt;EM&gt;1. Oktober 2009: Vererben oder aggregieren?&lt;/EM&gt; 
&lt;LI&gt;1. September 2009: &lt;A href="http://www.aspnetzone.de/blogs/peterbucher/archive/2009/09/01/alles-var-oder-nicht.aspx"&gt;Alles var – oder nicht?&lt;/A&gt; 
&lt;LI&gt;1. August 2009: &lt;A href="http://www.aspnetzone.de/blogs/peterbucher/archive/2009/08/01/c-oder-vb-welche-sprache-soll-ich-lernen.aspx"&gt;C# oder VB: Welche Sprache soll ich lernen?&lt;/A&gt; 
&lt;LI&gt;1. Juli 2009: &lt;A href="http://www.aspnetzone.de/blogs/peterbucher/archive/2009/07/01/prim-rschl-ssel-guid-vs-identity.aspx"&gt;Primärschlüssel: GUID vs Identity&lt;/A&gt; 
&lt;LI&gt;1. Juni 2009: &lt;A href="http://www.aspnetzone.de/blogs/peterbucher/archive/2009/06/01/heisst-die-zukunft-ria.aspx"&gt;Heißt die Zukunft RIA?&lt;/A&gt; 
&lt;LI&gt;1. Mai 2009: &lt;A href="http://www.aspnetzone.de/blogs/peterbucher/archive/2009/05/01/woran-erkennt-man-einen-guten-entwickler.aspx"&gt;Woran erkennt man einen guten Entwickler?&lt;/A&gt; 
&lt;LI&gt;1. April 2009: &lt;A href="http://www.aspnetzone.de/blogs/peterbucher/archive/2009/04/01/interfaces-vs-abstrakte-klassen.aspx"&gt;Interfaces vs abstrakte Klassen&lt;/A&gt; 
&lt;LI&gt;1. März 2009: &lt;A href="http://www.aspnetzone.de/blogs/peterbucher/archive/2009/03/01/sinn-und-zweck-von-aop.aspx"&gt;Sinn und Zweck von AOP&lt;/A&gt; 
&lt;LI&gt;1. Februar 2009: &lt;A href="http://www.aspnetzone.de/blogs/peterbucher/archive/2009/02/01/die-forderung-nach-softwarequalit-t.aspx"&gt;Die Forderung nach Softwarequalität&lt;/A&gt; 
&lt;LI&gt;1. Januar 2009: &lt;A href="http://www.aspnetzone.de/blogs/peterbucher/archive/2009/01/01/soa-vs-woa.aspx"&gt;SOA vs WOA&lt;/A&gt; 
&lt;LI&gt;1. Dezember 2008: &lt;A href="http://www.aspnetzone.de/blogs/peterbucher/archive/2008/12/01/dynamic-language-runtime-net-quo-vadis.aspx"&gt;Dynamic Language Runtime: .NET, quo vadis?&lt;/A&gt; &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Heute, am 1. Januar 2010, ist es nun wieder so weit, und unser Thema für diesen Monat lautet: &lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;EM&gt;this oder kein this&lt;/EM&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;So wohl Golo wie auch ich haben uns unabhängig voneinander im Vorfeld unsere Gedanken gemacht, wie wir diesem Thema gegenüberstehen. &lt;A href="http://www.des-eisbaeren-blog.de/post/2010/01/01/this-oder-kein-this.aspx"&gt;Golos Kommentar&lt;/A&gt; findet sich zeitgleich in seinem Blog, folgend nun mein Kommentar zu diesem Thema.&lt;/P&gt;
&lt;P&gt;Generell ist es sinnvoll, wenn ohne weiteres Zutun gleich erfasst werden kann, ob es sich um eine lokale, statische oder instanzbehaftete Variable handelt. &lt;BR&gt;Aus diesem Grund gibt es Konventionen, wie etwas auszusehen hat, sei dies mit Pascal- (fooBar) / Camel-Casing (FooBar) oder durch Prä- / Postfixe (m_foo, foo_m).&lt;/P&gt;
&lt;P&gt;Im Allgemeinen hat es sich bei mir so entwickelt, dass ich mich immer mehr zu der empfohlenen Microsoft Konvention hin bewegt habe, was die Einarbeitung in andere Projeke um einiges leichter macht, &lt;BR&gt;da diese Konvention häufig – wenn auch teilweise abgeändert – verwendet wird.&lt;/P&gt;
&lt;P&gt;Im aktuellen Streitgespräch geht es darum, ob this verwendet wird / nicht verwendet wird und wo es verwendet wird.&lt;/P&gt;
&lt;P&gt;this wird zwanghaft benötigt, um auf die Referenz auf sich selber, in die Hand zu bekommen. &lt;BR&gt;Beispielsweise wenn in einer User-Klasse eine .Save-Methode angeboten wird, die ihrerseits aber einen Service benutzt um sich speichern zu lassen:&lt;/P&gt;
&lt;P&gt;&lt;code&gt;&lt;span style="color: Black;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt; &lt;br /&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;public&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;class&lt;/span&gt; User &lt;br /&gt;{ &lt;br /&gt;    &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;public&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;void&lt;/span&gt; Save() &lt;br /&gt;    { &lt;br /&gt;        ServiceLocator &lt;br /&gt;                .Resolve&amp;lt;IUserService&amp;gt;() &lt;br /&gt;                .Save(&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;this&lt;/span&gt;); &lt;br /&gt;    } &lt;br /&gt;} &lt;/span&gt;&lt;/code&gt;&lt;/P&gt;
&lt;P&gt;Erweiterungsmethoden benutzen this als Kennzeichnung:&lt;/P&gt;
&lt;P&gt;&lt;code&gt;&lt;span style="color: Black;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt; &lt;br /&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;static&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;void&lt;/span&gt; ForEach&amp;lt;T&amp;gt;(&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;this&lt;/span&gt; IEnumerable&amp;lt;T&amp;gt; source, Action&amp;lt;T&amp;gt; action) &lt;br /&gt;{ &lt;br /&gt;    &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;foreach&lt;/span&gt; (var item &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;in&lt;/span&gt; source) &lt;br /&gt;    { &lt;br /&gt;        action(item); &lt;br /&gt;    } &lt;br /&gt;} &lt;/span&gt;&lt;/code&gt;&lt;/P&gt;
&lt;P&gt;Bei einer Indexerdeklaration wird this auch benötigt:&lt;/P&gt;
&lt;P&gt;&lt;code&gt;&lt;span style="color: Black;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;public&lt;/span&gt; User &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;this&lt;/span&gt;[sring index]&lt;br /&gt;{&lt;br /&gt;   get { &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;return&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;this&lt;/span&gt;._list[index]; }&lt;br /&gt;   set { &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;this&lt;/span&gt;._list[index] &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; value; }&lt;br /&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/P&gt;
&lt;P&gt;Ein andere Stelle wo this benutzt werden muss, ist beim angeben von zusätzlichen Konstruktoren von sich selbst, die auch noch aufgerufen werden sollen:&lt;/P&gt;
&lt;P&gt;&lt;code&gt;&lt;span style="color: Black;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt; &lt;br /&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;public&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;class&lt;/span&gt; UserService &lt;br /&gt;{ &lt;br /&gt;    &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;private&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;readonly&lt;/span&gt; IRepository&amp;lt;User&amp;gt; _userRepository; &lt;br /&gt;&lt;br /&gt;    &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;public&lt;/span&gt; UserService() : &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;this&lt;/span&gt;(&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;new&lt;/span&gt; XmlUserRepository()) &lt;br /&gt;    { &lt;br /&gt;        &lt;br /&gt;    } &lt;br /&gt;    &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;public&lt;/span&gt; UserService(IRepository&amp;lt;User&amp;gt; userRepository) &lt;br /&gt;    { &lt;br /&gt;         _userRepository &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; userRepository; &lt;br /&gt;    } &lt;br /&gt;} &lt;/span&gt;&lt;/code&gt;&lt;/P&gt;
&lt;P&gt;Im ersten Konstruktor wird angegeben, das auch der zweite Konstruktor mit einem Parameter aufgerufen werden soll.&lt;/P&gt;
&lt;P&gt;Wenn die Instanzvariable “_userRepository” keinen Unterstrich hätte – also “userRepository” – müsste this verwendet werden, damit der Kompiler zwischen Instanzvariable und Argument unterscheiden kann, also:&lt;/P&gt;&lt;code&gt;&lt;span style="color: Black;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt; &lt;br /&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;private&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;readonly&lt;/span&gt; IRepository&amp;lt;User&amp;gt; userRepository; &lt;br /&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;public&lt;/span&gt; UserService(IRepository&amp;lt;User&amp;gt; userRepository) &lt;br /&gt;{ &lt;br /&gt;    &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;this&lt;/span&gt;.userRepository &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; userRepository; &lt;br /&gt;} &lt;/span&gt;&lt;/code&gt; 
&lt;P&gt;Zu Anfang habe ich das Präfix “_” vor einer Instanzvariable benutzt, so kann man – auch im Intellisense – ohne Probleme auswählen und unterscheiden, da alle schön gruppiert sind. &lt;BR&gt;&lt;BR&gt;In Visual Studio 2005 gab es allerdings kein Intellisense bei der Eingabe von “_test” im Code-Editor. &lt;BR&gt;Ich habe dort “this._test” genutzt, denn es ist ja ein Instanzmember und mit der Eingabe von “this.” gab es dann Intellisense.&lt;/P&gt;
&lt;P&gt;Ab Visual Studio 2008 gibt es bereits bei der Eingabe von “_” Intellisense, somit wäre “this” überflüssig. Allerdings habe ich mir angewöhnt, this überall anzugeben, wo sich etwas auf die Instanz bezieht.&lt;/P&gt;
&lt;P&gt;Also für Methodenaufrufe auf der Instanz (in der Regel protected oder private Methoden), Eigenschaften sowie Instanzfelder. &lt;BR&gt;Es ist so möglich auf den ersten Blick zu unterscheiden und erfassen, was eine lokale Variable ist, was ein statisches Feld / Konstante. Oder doch eine Instanzvariable?.&lt;/P&gt;
&lt;P&gt;Was meint ihr dazu?&lt;/P&gt;&lt;img src="http://www.aspnetzone.de/aggbug.aspx?PostID=216045" width="1" height="1"&gt;</description><category domain="http://www.aspnetzone.de/blogs/peterbucher/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://www.aspnetzone.de/blogs/peterbucher/archive/tags/Streitgespr_26002300_228_3B00_ch/default.aspx">Streitgespr&amp;#228;ch</category><category domain="http://www.aspnetzone.de/blogs/peterbucher/archive/tags/this/default.aspx">this</category></item><item><title>InternalsVisibleToAttribute und signierte Assemblies: So funktionierts garantiert.</title><link>http://www.aspnetzone.de/blogs/peterbucher/archive/2009/12/04/internalsvisibletoattribute-und-signierte-assemblies-so-funktionierts-garantiert.aspx</link><pubDate>Fri, 04 Dec 2009 15:46:00 GMT</pubDate><guid isPermaLink="false">ce930855-ae9b-4fa4-8077-06a76071cc6a:214947</guid><dc:creator>Peter Bucher</dc:creator><slash:comments>3</slash:comments><comments>http://www.aspnetzone.de/blogs/peterbucher/comments/214947.aspx</comments><wfw:commentRss>http://www.aspnetzone.de/blogs/peterbucher/commentrss.aspx?PostID=214947</wfw:commentRss><description>&lt;P&gt;Stellt euch vor, ihr habt zwei Assemblies:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;MyProject.Core 
&lt;LI&gt;MyProject.Core.Tests &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Im Core-Projekt gibt es Typen, die nicht öffentlich gemacht werden sollten, allerdings für die UnitTests zugänglich sein sollen. &lt;BR&gt;Nun, das ist ein kleines Problem, wenn man das Attribut “InternalsVisibleTo” kennt, mithilfe folgender Dekleration in der &lt;STRONG&gt;AssemblyInfo.cs des MyProject.Core-Projekts&lt;/STRONG&gt; kann dies einfach erledigt werden:&lt;/P&gt;
&lt;P&gt;&lt;code&gt;&lt;span style="color: Black;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;[assembly: InternalsVisibleTo("MyProject.Core.Tests”)]&lt;/span&gt;&lt;/code&gt;&lt;/P&gt;
&lt;DIV class=Quotes&gt;&lt;BR =&gt;Das macht sogar sehr viel Sinn, denn sonst können Kollisionen und Verwechslungen der Extensionmethods beim Endbenutzer vorkommen.&lt;/DIV&gt;
&lt;P&gt;Soweit, so gut. Die Typen der MyProject.Core-Assembly sind jetzt in der MyProject.Core.Tests-Assembly sichtbar. &lt;BR&gt;Müssen die Projekte jedoch signiert sein, kommt es zu einem grösseren Problem.&lt;/P&gt;
&lt;P&gt;In &lt;A href="http://www.sturmnet.org/blog/2005/05/10/internalsvisibleto-sn"&gt;mehreren&lt;/A&gt; Blogs sind die nötigen Schritte &lt;A href="http://weblogs.asp.net/bhouse/archive/2006/04/17/443100.aspx"&gt;beschrieben&lt;/A&gt;, &lt;U&gt;jedoch werden da wichtige Punkte nicht genannt&lt;/U&gt;, die einem zur Verzweiflung treiben können. &lt;BR&gt;Die sind wie folgt:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Alle involvierten Assemblies müssen signiert werden. 
&lt;LI&gt;Der PublicKey muss vom Projekt bezogen werden, bei dem die Internals sichtbar werden sollen, in unserem Fall also das MyProject.Core.Tests-Projekt. &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Nach einer weiteren Suche bin ich schlussendlich auf einem (selbsternannten) Newbie-Blog fündig geworden. &lt;BR&gt;Noch später sties ich dann auf die folgende Anleitung, die eigentlich alles beinhaltet, sodass ich nicht alles im Detail niederschreiben muss, trotzdem die wichtigen Punkte nennen kann und vorallem die Lösung wieder einmal finde:&lt;/P&gt;
&lt;P&gt;Also, beachtet die oben stehenden zwei Punkte und haltet euch an folgende Anleitung:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A title=http://statestreetgang.net/post/2008/04/InternalsVisibleToAttribute-and-Strong-Named-Assemblies-Step-by-Step.aspx href="http://statestreetgang.net/post/2008/04/InternalsVisibleToAttribute-and-Strong-Named-Assemblies-Step-by-Step.aspx"&gt;http://statestreetgang.net/post/2008/04/InternalsVisibleToAttribute-and-Strong-Named-Assemblies-Step-by-Step.aspx&lt;/A&gt; &lt;/LI&gt;&lt;/UL&gt;&lt;img src="http://www.aspnetzone.de/aggbug.aspx?PostID=214947" width="1" height="1"&gt;</description><category domain="http://www.aspnetzone.de/blogs/peterbucher/archive/tags/Tipps/default.aspx">Tipps</category><category domain="http://www.aspnetzone.de/blogs/peterbucher/archive/tags/.NET/default.aspx">.NET</category><category domain="http://www.aspnetzone.de/blogs/peterbucher/archive/tags/Assembly/default.aspx">Assembly</category><category domain="http://www.aspnetzone.de/blogs/peterbucher/archive/tags/InternalsVisibleTo/default.aspx">InternalsVisibleTo</category><category domain="http://www.aspnetzone.de/blogs/peterbucher/archive/tags/StrongName/default.aspx">StrongName</category></item><item><title>Reflection – Fluch oder Segen?</title><link>http://www.aspnetzone.de/blogs/peterbucher/archive/2009/12/01/reflection-fluch-oder-segen.aspx</link><pubDate>Tue, 01 Dec 2009 08:37:00 GMT</pubDate><guid isPermaLink="false">ce930855-ae9b-4fa4-8077-06a76071cc6a:214864</guid><dc:creator>Peter Bucher</dc:creator><slash:comments>5</slash:comments><comments>http://www.aspnetzone.de/blogs/peterbucher/comments/214864.aspx</comments><wfw:commentRss>http://www.aspnetzone.de/blogs/peterbucher/commentrss.aspx?PostID=214864</wfw:commentRss><description>&lt;P&gt;Am 13. Oktober 2008 haben &lt;A href="http://www.des-eisbaeren-blog.de/"&gt;Golo Roden&lt;/A&gt; und ich unter dem Titel &lt;A href="http://www.aspnetzone.de/blogs/peterbucher/archive/2008/10/13/noch-fragen-roden-ja-bucher.aspx"&gt;Noch Fragen, Roden? Ja, Bucher!&lt;/A&gt; angekündigt, jeweils zum ersten eines jeden Monats einen Kommentar zu einem vorab gemeinsam gewählten Thema verfassen zu wollen.&lt;/P&gt;
&lt;P&gt;Bisher sind in dieser Reihe folgende Kommentare erschienen: &lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;EM&gt;1. November 2009: &lt;A href="http://www.aspnetzone.de/blogs/peterbucher/archive/2009/11/01/wieviel-sinn-machen-unittests.aspx"&gt;Wieviel Sinn machen Unittests?&lt;/A&gt;&lt;/EM&gt; 
&lt;LI&gt;&lt;EM&gt;1. Oktober 2009: Vererben oder aggregieren?&lt;/EM&gt; 
&lt;LI&gt;1. September 2009: &lt;A href="http://www.aspnetzone.de/blogs/peterbucher/archive/2009/09/01/alles-var-oder-nicht.aspx"&gt;Alles var – oder nicht?&lt;/A&gt; 
&lt;LI&gt;1. August 2009: &lt;A href="http://www.aspnetzone.de/blogs/peterbucher/archive/2009/08/01/c-oder-vb-welche-sprache-soll-ich-lernen.aspx"&gt;C# oder VB: Welche Sprache soll ich lernen?&lt;/A&gt; 
&lt;LI&gt;1. Juli 2009: &lt;A href="http://www.aspnetzone.de/blogs/peterbucher/archive/2009/07/01/prim-rschl-ssel-guid-vs-identity.aspx"&gt;Primärschlüssel: GUID vs Identity&lt;/A&gt; 
&lt;LI&gt;1. Juni 2009: &lt;A href="http://www.aspnetzone.de/blogs/peterbucher/archive/2009/06/01/heisst-die-zukunft-ria.aspx"&gt;Heißt die Zukunft RIA?&lt;/A&gt; 
&lt;LI&gt;1. Mai 2009: &lt;A href="http://www.aspnetzone.de/blogs/peterbucher/archive/2009/05/01/woran-erkennt-man-einen-guten-entwickler.aspx"&gt;Woran erkennt man einen guten Entwickler?&lt;/A&gt; 
&lt;LI&gt;1. April 2009: &lt;A href="http://www.aspnetzone.de/blogs/peterbucher/archive/2009/04/01/interfaces-vs-abstrakte-klassen.aspx"&gt;Interfaces vs abstrakte Klassen&lt;/A&gt; 
&lt;LI&gt;1. März 2009: &lt;A href="http://www.aspnetzone.de/blogs/peterbucher/archive/2009/03/01/sinn-und-zweck-von-aop.aspx"&gt;Sinn und Zweck von AOP&lt;/A&gt; 
&lt;LI&gt;1. Februar 2009: &lt;A href="http://www.aspnetzone.de/blogs/peterbucher/archive/2009/02/01/die-forderung-nach-softwarequalit-t.aspx"&gt;Die Forderung nach Softwarequalität&lt;/A&gt; 
&lt;LI&gt;1. Januar 2009: &lt;A href="http://www.aspnetzone.de/blogs/peterbucher/archive/2009/01/01/soa-vs-woa.aspx"&gt;SOA vs WOA&lt;/A&gt; 
&lt;LI&gt;1. Dezember 2008: &lt;A href="http://www.aspnetzone.de/blogs/peterbucher/archive/2008/12/01/dynamic-language-runtime-net-quo-vadis.aspx"&gt;Dynamic Language Runtime: .NET, quo vadis?&lt;/A&gt; &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Heute, am 1. Dezember 2009, ist es nun wieder so weit, und unser Thema für diesen Monat lautet: &lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;EM&gt;Reflection – Fluch oder Segen?&lt;/EM&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;So wohl Golo wie auch ich haben uns unabhängig voneinander im Vorfeld unsere Gedanken gemacht, wie wir diesem Thema gegenüberstehen. &lt;A href="http://www.des-eisbaeren-blog.de/post/2009/12/01/Reflection-e28093-Fluch-oder-Segen.aspx"&gt;Golos Kommentar&lt;/A&gt; findet sich zeitgleich in seinem Blog, folgend nun mein Kommentar zu diesem Thema:&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;/STRONG&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Reflection?&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Reflection, &lt;A href="http://de.wikipedia.org/wiki/Reflexion_(Programmierung)"&gt;Reflexion&lt;/A&gt; bzw. Introspektion macht es möglich, Programme wie Daten zu behandeln und so Informationen über Typen / Member abzurufen und auch zu setzen. &lt;/P&gt;
&lt;P&gt;Eine Einführung zu Reflection findet sich bspw. &lt;A href="http://www.aspheute.com/artikel/20040624.htm"&gt;hier&lt;/A&gt;, und auf myCSharp.de findet sich ein &lt;A href="http://www.mycsharp.de/wbb2/thread.php?threadid=68247"&gt;super ausführlicher und tiefgehender Artikel&lt;/A&gt;, der auf jeden Fall lesenswert ist. &lt;BR&gt;Darüber hinaus ist es per Reflection möglich, eine späte Bindung in jeglicher Hinsicht zu erreichen. Sei dies das dynamische Laden einer Assembly oder auch das dynamische Aufrufen einer Methode zur Laufzeit.&lt;BR&gt;Damit lassen sich Service Locator und Dependency Injection Container - also Systeme zur Entkoppelung - umsetzen, die je nach Konfiguration eine andere Assembly mitsamt ihren Typen lädt.&lt;/P&gt;
&lt;P&gt;Ein praktischer Anwendungsfall wäre ein Serialisierungsmechanismus, der Objekthierarchien bspw. in XML-Form abspeichern kann. &lt;BR&gt;Mithilfe von Reflection können die zu speichernden Typen in Form einer Instanz von &lt;A href="http://msdn.microsoft.com/de-de/library/system.type.aspx"&gt;System.Reflection.Type&lt;/A&gt; abgefragt werden.&lt;/P&gt;
&lt;P&gt;Ein Type Objekt macht alles verfügbar, was zu einem Typen gehört, seien dies Methoden, Attribute, Eigenschaften oder gar Felder.&lt;/P&gt;
&lt;P&gt;Kleines Beispiel:&lt;/P&gt;
&lt;P&gt;&lt;code&gt;&lt;span style="color: Black;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;int&lt;/span&gt; count &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; 2012; &lt;br /&gt;Type typeOfCount &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; count.GetType(); &lt;span style="color: Green;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;// Oder: typeof(int)&lt;/span&gt;&lt;br /&gt;Console.WriteLine(typeOfCount); &lt;/span&gt;&lt;/code&gt;&lt;/P&gt;
&lt;P&gt;Ausgabe ist die Stringrepräsentation des Types der mit dem Alias int verknüpft ist, also: “System.Int32”.&lt;/P&gt;
&lt;P&gt;Schluss ist damit noch lange nicht, es ist genau so möglich Code zur Kompile- oder Laufzeit dynamisch zu erstellen. &lt;BR&gt;Das .NET Framework bietet die hierzu nötigen Klassen im Namensraum &lt;A href="http://msdn.microsoft.com/de-de/library/system.reflection.emit(VS.80).aspx"&gt;System.Reflection.Emit&lt;/A&gt; bereit.&lt;/P&gt;
&lt;P&gt;Die Anwendung dieser API ist jedoch relativ umständlich und komplex, dafür extrem mächtig.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;/STRONG&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Segen?&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Reflection und Bibliotheken die darauf aufbauen birgen ein riesen Potential und ungeahnte Möglichkeiten. &lt;BR&gt;Die Anwendung ist extrem einfach und viele Features im .NET Framework selber bauen auch auf Reflection auf.&lt;/P&gt;
&lt;P&gt;Also auf jeden Fall ein Segen… auf der einen Seite.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;/STRONG&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Fluch?&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Auf der anderen Seite kann es auch zu einem Fluch werden, denn mit Reflection kann viel Humbug getrieben werden. &lt;BR&gt;Zum einen ist die Ausführung von Code der Reflection nutzt, um einiges langsamer, was zu Performanceproblemen führen kann, zum anderen kann so auch die Mauer der Zugriffsmodifizierer umgangen werden, da es ohne viel Aufwand möglich ist, auch private Members einer Klasse auszulesen.&lt;/P&gt;
&lt;P&gt;Zudem können Probleme auftreten, wenn die Umgebung in der eine Anwendung läuft, zuwenig Rechte hat. Das kann dazu führen, das eine Anwendung überhaupt nicht, oder nur eingeschränkt lauffähig ist, in restriktiven Umgebungen.&lt;/P&gt;
&lt;P&gt;Über das dynamische Laden von Assemblies kann es zu Sicherheitsproblemen kommen, falls die geladenen Assemblies schädlichen Code enthalten.&lt;/P&gt;
&lt;P&gt;Allerdings lassen sich viele der geschilderten Probleme umgehen bzw. beheben. &lt;BR&gt;Caching – dafür gibt es auch schon &lt;A href="http://www.codeproject.com/KB/cs/fast_dynamic_properties.aspx"&gt;diverse&lt;/A&gt;, &lt;A href="http://www.codeproject.com/KB/library/fasterflect_.aspx"&gt;fertige&lt;/A&gt; APIs, die auch neben Caching noch weitere Verbesserungen für Reflection bringen.&lt;/P&gt;
&lt;P&gt;Alle anderen Probleme brauchen eine vorsichtige und sparsame Verwendung von Reflection. &lt;BR&gt;Mein Credo dabei ist: &lt;U&gt;So viel wie nötig, so wenig wie möglich&lt;/U&gt;. Denn sehr vieles geht auch ohne Reflection, kann aber mit Reflection nachgebaut werden.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;System.Linq.Expressions&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Mit der Einführung von LINQ und in dessen Zuge auch dem neuen Namensraum &lt;A href="http://msdn.microsoft.com/de-de/library/system.linq.expressions(VS.95).aspx"&gt;System.Linq.Expressions&lt;/A&gt; gibt es eine weitere und einfachere Möglichkeit, Code dynamisch zu generieren und vorallem auch zu analysieren.&lt;/P&gt;
&lt;P&gt;Zum einen ist es mit LINQ und den Expression Trees möglich, Lambda Ausdrücke, die in eine Methode eingespiesen werden, auseinander zu nehmen und zu analysieren. &lt;BR&gt;In .NET selber wird das bspw. verwendet, um LINQ abfragen zu parsen und diese anschliessend in ein SQL-Statement zu überführen.&lt;/P&gt;
&lt;P&gt;Zumindest laut meinem Wissen, ist es mit dem Expressions-API nur möglich, Methoden dynamisch zu generieren und zu kompilieren. Das ist eine Einschränkung, die allerdings für viele Anwendungsfälle nicht weiter tragisch ist, damit lässt einfach schon relativ viel realisieren.&lt;/P&gt;
&lt;P&gt;Das Expressions-API nutzt intern auch Reflection und schlussendlich auch die Klassen aus dem Namensraum System.Reflection.Emit.&lt;/P&gt;
&lt;P&gt;Beispiele mit dem Expressions-API:&lt;/P&gt;Addieren von zwei Zahlen per statischem Code. &lt;BR&gt;&lt;code&gt;&lt;span style="color: Black;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;private&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;void&lt;/span&gt; AddPlain() &lt;br /&gt;{ &lt;br /&gt;  &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;int&lt;/span&gt; one &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; 1; &lt;br /&gt;  &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;int&lt;/span&gt; two &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; 2; &lt;br /&gt;&lt;br /&gt;  &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;int&lt;/span&gt; result &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; one &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;+&lt;/span&gt; two; &lt;br /&gt;} &lt;/span&gt;&lt;/code&gt;&lt;/P&gt;
&lt;P&gt;Addieren von zwei Zahlen, die Methode wird dynamisch zusammengebaut. &lt;BR&gt;&lt;code&gt;&lt;span style="color: Black;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;private&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;static&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;void&lt;/span&gt; AddWithExpressions() &lt;br /&gt;{ &lt;br /&gt;  ConstantExpression numberOneExpression &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; Expression.Constant(2); &lt;br /&gt;  ConstantExpression numberTwoExpression &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; Expression.Constant(3); &lt;br /&gt;&lt;br /&gt;  BinaryExpression addExpression &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; Expression.Add(numberOneExpression, numberTwoExpression); &lt;br /&gt;&lt;br /&gt;  var lambdaExpression &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; Expression.Lambda&amp;lt;Func&amp;lt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;int&lt;/span&gt;&amp;gt;&amp;gt;(addExpression); &lt;br /&gt;  Func&amp;lt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;int&lt;/span&gt;&amp;gt; methodDelegate &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; lambdaExpression.Compile(); &lt;br /&gt;&lt;br /&gt;  &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;int&lt;/span&gt; result &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; methodDelegate(); &lt;br /&gt;} &lt;/span&gt;&lt;/code&gt;&lt;BR&gt;&lt;BR&gt;Funktion zum Addieren von zwei Zahlen per statischm Code. &lt;BR&gt;&lt;code&gt;&lt;span style="color: Black;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;private&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;static&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;int&lt;/span&gt; AddFunctionPlain(&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;int&lt;/span&gt; left, &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;int&lt;/span&gt; right) &lt;br /&gt;{ &lt;br /&gt;  &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;return&lt;/span&gt; left &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;+&lt;/span&gt; right; &lt;br /&gt;} &lt;/span&gt;&lt;/code&gt;&lt;/P&gt;
&lt;P&gt;Funktion zum Addieren von zwei Zahlen dynamische generiert. &lt;BR&gt;&lt;code&gt;&lt;span style="color: Black;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;private&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;static&lt;/span&gt; Func&amp;lt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;int&lt;/span&gt;, &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;int&lt;/span&gt;, &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;int&lt;/span&gt;&amp;gt; GenerateAddFunction() &lt;br /&gt;{ &lt;br /&gt;  ParameterExpression leftParameter &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; Expression.Parameter(&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;typeof&lt;/span&gt;(&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;int&lt;/span&gt;), &lt;span style="color: #666666;background-color: #e4e4e4;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;"left"&lt;/span&gt;); &lt;br /&gt;  ParameterExpression rightParameter &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; Expression.Parameter(&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;typeof&lt;/span&gt;(&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;int&lt;/span&gt;), &lt;span style="color: #666666;background-color: #e4e4e4;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;"right"&lt;/span&gt;); &lt;br /&gt;&lt;br /&gt;  BinaryExpression addExpression &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; Expression.Add(leftParameter, rightParameter); &lt;br /&gt;&lt;br /&gt;  var lambdaExpression &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; Expression.Lambda&amp;lt;Func&amp;lt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;int&lt;/span&gt;, &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;int&lt;/span&gt;, &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;int&lt;/span&gt;&amp;gt;&amp;gt;(addExpression, leftParameter, rightParameter); &lt;br /&gt;  Func&amp;lt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;int&lt;/span&gt;, &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;int&lt;/span&gt;, &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;int&lt;/span&gt;&amp;gt; methodDelegate &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; lambdaExpression.Compile(); &lt;br /&gt;&lt;br /&gt;  &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;return&lt;/span&gt; methodDelegate; &lt;br /&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/P&gt;
&lt;P&gt;Wie man sehen kann, ist die Nutzung von Expressions zum dynamische Generieren von Methoden für Ihre Mächtigkeit immer noch relativ einfach zu nutzen.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;/STRONG&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Fazit&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Das war ein kurzer Rundflug durch Reflection und verwandte Gebiete, in dem ich versucht habe, die Vorteile, Möglichkeiten sowie auch Gefahren aufzuzeigen. &lt;BR&gt;Reflection ist genial, aber nur wenn es sinngemäss und mit Vorsicht eingesetzt wird.&lt;/P&gt;
&lt;P&gt;Also: Fluch und Segen :)&lt;/P&gt;&lt;img src="http://www.aspnetzone.de/aggbug.aspx?PostID=214864" width="1" height="1"&gt;</description><category domain="http://www.aspnetzone.de/blogs/peterbucher/archive/tags/.NET/default.aspx">.NET</category><category domain="http://www.aspnetzone.de/blogs/peterbucher/archive/tags/Streitgespr_26002300_228_3B00_ch/default.aspx">Streitgespr&amp;#228;ch</category><category domain="http://www.aspnetzone.de/blogs/peterbucher/archive/tags/Type/default.aspx">Type</category><category domain="http://www.aspnetzone.de/blogs/peterbucher/archive/tags/Lambda/default.aspx">Lambda</category><category domain="http://www.aspnetzone.de/blogs/peterbucher/archive/tags/LINQ/default.aspx">LINQ</category><category domain="http://www.aspnetzone.de/blogs/peterbucher/archive/tags/Expressions/default.aspx">Expressions</category><category domain="http://www.aspnetzone.de/blogs/peterbucher/archive/tags/Reflection/default.aspx">Reflection</category><category domain="http://www.aspnetzone.de/blogs/peterbucher/archive/tags/Reflexion/default.aspx">Reflexion</category></item></channel></rss>
