{"id":317,"date":"2012-10-10T21:50:17","date_gmt":"2012-10-10T19:50:17","guid":{"rendered":"http:\/\/www.steffen-liersch.de\/content\/de\/?p=317"},"modified":"2025-03-02T11:30:41","modified_gmt":"2025-03-02T10:30:41","slug":"properties-instead-of-read-only-variables","status":"publish","type":"post","link":"https:\/\/www.steffen-liersch.de\/content\/de\/2012\/10\/properties-instead-of-read-only-variables\/","title":{"rendered":"Eigenschaften statt schreibgesch\u00fctzter Variablen"},"content":{"rendered":"<p>Das .NET Framework kennt schreibgesch\u00fctzte Variablen als Alternative zu Konstanten. W\u00e4hrend der Wert von Konstanten bereits bei der Kompilierung bekannt sein muss, k\u00f6nnen schreibgesch\u00fctzte Variablen zur Laufzeit im Konstruktor initialisiert werden (oder nat\u00fcrlich auch inline).<\/p>\n<h2>Variablen ver\u00e4nderlicher Verweistypen<\/h2>\n<p>Eine Variable kann unabh\u00e4ngig vom Datentyp als schreibgesch\u00fctzt gekennzeichnet werden. Der Schreibschutz ist f\u00fcr Werttypen nach der Erzeugung garantiert. F\u00fcr Variablen von Verweistypen bezieht sich der Schreibschutz lediglich auf die in der Variablen gespeicherten Referenz. Array-Referenzen k\u00f6nnen zwar als schreibgesch\u00fctzt gekennzeichnet werden, dennoch ist es m\u00f6glich, die im Array gespeicherten Elemente auszutauschen.<\/p>\n<p>Es wird empfohlen, Verweistypen nur dann als schreibgesch\u00fctzt zu kennzeichnen, wenn diese aufgrund ihrer Implementierung tats\u00e4chlich auch schreibgesch\u00fctzt sind. Beispielsweise handelt es sich bei der Klasse String um einen solchen unver\u00e4nderlichen Verweistyp.<\/p>\n<h2>\u00d6ffentliche, schreibgesch\u00fctzte Variablen im Vergleich zu Eigenschaften<\/h2>\n<p>Microsoft FxCop erzeugt f\u00fcr \u00f6ffentliche Variablen generell die Meldung \"Do not declare visible instance fields\".<\/p>\n<p>Es ist m\u00f6glich, diese Meldung per Quellcode wie folgt zu unterdr\u00fccken. Allerdings muss momentan ein entsprechendes Attribut f\u00fcr jedes einzelne Feld hinzugef\u00fcgt werden. Die Attributklasse SuppressMessageAttribute funktioniert nur im Zusammenhang mit der Compiler-Option \"CODE_ANALYSIS\".<\/p>\n<pre><code class=\"cs\">[SuppressMessage(\"Microsoft.Design\", \"CA1051:DoNotDeclareVisibleInstanceFields\")]\r\npublic readonly string UserName;<\/code><\/pre>\n<p>Auch wenn es m\u00f6glich ist, die FxCop-Meldung zu unterdr\u00fccken, sollte die Frage nach dem Sinn dieser Meldung gestellt werden.<\/p>\n<p>Im Hinblick auf die Robustheit von Bibliotheken sind \u00f6ffentliche Eigenschaften \u00f6ffentlichen Variablen vorzuziehen. Wird aus einer schreibgesch\u00fctzten Eigenschaft eine ver\u00e4nderliche Eigenschaft, bleibt die Schnittstelle der Bibliothek kompatibel. Gleiches gilt f\u00fcr Variablen. Die \u00c4nderung einer schreibgesch\u00fctzten Variablen zu einer Eigenschaft ist jedoch nicht kompatibel.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Das .NET Framework kennt schreibgesch\u00fctzte Variablen als Alternative zu Konstanten. W\u00e4hrend der Wert von Konstanten bereits bei der Kompilierung bekannt sein muss, k\u00f6nnen schreibgesch\u00fctzte Variablen zur Laufzeit im Konstruktor initialisiert werden (oder nat\u00fcrlich auch inline). Variablen ver\u00e4nderlicher Verweistypen Eine Variable kann unabh\u00e4ngig vom Datentyp als schreibgesch\u00fctzt gekennzeichnet werden. Der Schreibschutz ist f\u00fcr Werttypen nach der [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5],"tags":[21,19],"class_list":["post-317","post","type-post","status-publish","format-standard","hentry","category-net","tag-net","tag-basics"],"_links":{"self":[{"href":"https:\/\/www.steffen-liersch.de\/content\/de\/wp-json\/wp\/v2\/posts\/317","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.steffen-liersch.de\/content\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.steffen-liersch.de\/content\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.steffen-liersch.de\/content\/de\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.steffen-liersch.de\/content\/de\/wp-json\/wp\/v2\/comments?post=317"}],"version-history":[{"count":11,"href":"https:\/\/www.steffen-liersch.de\/content\/de\/wp-json\/wp\/v2\/posts\/317\/revisions"}],"predecessor-version":[{"id":971,"href":"https:\/\/www.steffen-liersch.de\/content\/de\/wp-json\/wp\/v2\/posts\/317\/revisions\/971"}],"wp:attachment":[{"href":"https:\/\/www.steffen-liersch.de\/content\/de\/wp-json\/wp\/v2\/media?parent=317"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.steffen-liersch.de\/content\/de\/wp-json\/wp\/v2\/categories?post=317"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.steffen-liersch.de\/content\/de\/wp-json\/wp\/v2\/tags?post=317"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}