<?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>Search results matching tags 'VB.NET' and 'Tipps und Tricks'</title><link>http://www.aspnetzone.de/search/SearchResults.aspx?o=DateDescending&amp;tag=VB.NET,Tipps+und+Tricks&amp;orTags=0</link><description>Search results matching tags 'VB.NET' and 'Tipps und Tricks'</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP2 (Build: 61120.2)</generator><item><title>Verwirrung in VB.NET: ByRef und ByVal</title><link>http://www.aspnetzone.de/blogs/juergengutsch/archive/2010/08/16/verwirrung-in-vb-net-byref-und-byval.aspx</link><pubDate>Mon, 16 Aug 2010 08:22:22 GMT</pubDate><guid isPermaLink="false">ce930855-ae9b-4fa4-8077-06a76071cc6a:218452</guid><dc:creator>Jürgen Gutsch</dc:creator><description>&lt;p&gt;.NET unterscheidet zwischen Referenz-Typen und Wert-Typen. Was bei vielen Entwicklern, die das nicht wissen oder beachten, zu kleineren Verwirrungen führen kann.&lt;/p&gt;  &lt;p&gt;Aber zuerst einmal die Definition:&lt;/p&gt;  &lt;p&gt;Werte-Typen sind zum Beispiel &lt;a href="http://msdn.microsoft.com/de-de/library/system.int32(v=VS.90).aspx"&gt;System.Int32&lt;/a&gt; und &lt;a href="http://msdn.microsoft.com/de-de/library/system.boolean(v=VS.90).aspx"&gt;System.Boolean&lt;/a&gt; welche im .NET-Framework vordefiniert sind. Eigene &lt;em&gt;Structs&lt;/em&gt; und &lt;em&gt;Enums&lt;/em&gt; sind ebenfalls Wertetypen. Strukturen sind auch dann Werte-Typen, wenn sie selber Referenz-Typen beinhalten.&lt;/p&gt;  &lt;p&gt;Referenz-Typen sind Objekte mit Klassen oder Interfaces deklariert werden.    &lt;br /&gt;Wichtig: Referenz-Typen halten immer nur einen Zeiger auf die eigentlichen Werte&lt;/p&gt;  &lt;p&gt;Lektüre:    &lt;br /&gt;&lt;a href="http://openbook.galileocomputing.de/visual_basic/Kapitel_05-006.htm#ae753f73274a0dca42b8d0127fd2edaf"&gt;Referenz- und Wertetypen&lt;/a&gt;     &lt;br /&gt;&lt;a href="http://msdn.microsoft.com/de-de/library/34yytbws(v=VS.90).aspx"&gt;Werttypen im allgemeinen Typsystem&lt;/a&gt;    &lt;br /&gt;&lt;a title="http://de.wikibooks.org/wiki/Arbeiten_mit_.NET:_Grundlagen:_C-Sharp/_Wertetypen_und_Verweistypen" href="http://de.wikibooks.org/wiki/Arbeiten_mit_.NET:_Grundlagen:_C-Sharp/_Wertetypen_und_Verweistypen"&gt;Arbeiten mit .NET: Grundlagen: Wertetypen und Verweistypen&lt;/a&gt;    &lt;br /&gt;&lt;a href="http://www.zdnet.de/anwendungsentwicklung_referenz__und_wert_typen_was_ist_der_unterschied_in__net_story-20000201-39194938-1.htm"&gt;Referenz- und Wert-Typen: Was ist der Unterschied in .NET?&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Da Referenz-Typen nur Zeiger sind, kommt es zur Verwirrung, wenn Referenz-Typen als Wert (VB.NET: ByVal) an Funktionen und Methoden übergeben werden. Da lediglich der Zeiger übergeben wird, kann das Objekt auch außerhalb er aufzurufenden Methode verändert werden. Das hat das gleiche Verhalten, wie bei Werte-Typen die als Referenz (VB.NET: &lt;em&gt;ByRef&lt;/em&gt;; C# &lt;em&gt;ref&lt;/em&gt;) übergeben werden.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Wieso die Verwirrung?&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Da die Schlüsselworte &lt;em&gt;ByRef&lt;/em&gt; und&lt;em&gt; ByVal&lt;/em&gt; in VB.NET immer explizit angegeben werden müssen, werden sie natürlich auch immer genutzt, sind immer sichtbar. Man nutzt &lt;em&gt;ByRef&lt;/em&gt; deshalb viel zu oft, ohne zu wissen, dass es oftmals gar nicht nötig ist. &lt;/p&gt;  &lt;p&gt;In C# muss das Schlüsselwort &lt;em&gt;ref&lt;/em&gt; dagegen nur angegeben werden, wenn wirklich etwas als Referenz übergeben werden muss. Das hat zur Folge, dass dieses Schlüsselwort nicht permanent sichtbar ist, man macht sich weniger Gedanken über die Art der zu übergebenden Parameter.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Also merken:&lt;/strong&gt; In VB.NET kann &lt;em&gt;ByVal&lt;/em&gt; eben auch &lt;em&gt;ByRef&lt;/em&gt; sein, wenn es sich bei dem TypParameter um einen Referenz-Typ handelt! ;-)&lt;/p&gt;&lt;div class="wlWriterHeaderFooter" style="text-align:left;margin:0px;padding:4px 4px 4px 4px;"&gt;&lt;a href="http://dotnet-kicks.de/kick/?url=http://www.aspnetzone.de/blogs/juergengutsch/archive/2010/08/16/verwirrung-in-vb-net-byref-und-byval.aspx"&gt;&lt;img src="http://dotnet-kicks.de/Services/Images/KickItImageGenerator.ashx?url=http://www.aspnetzone.de/blogs/juergengutsch/archive/2010/08/16/verwirrung-in-vb-net-byref-und-byval.aspx&amp;amp;bgcolor=3169AD&amp;amp;fgcolor=FFFFFF&amp;amp;border=000000&amp;amp;cbgcolor=D4E1ED&amp;amp;cfgcolor=000000" alt="DotNetKicks-DE Image" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;</description></item></channel></rss>