readonly in struct ist nicht wirklich readonly
-
Sorry, für meine mißverständliche Analogie zu C++.
Ich meinte bei C++ auch eher einen Copy-Konstruktor (denn wie Bashar angemerkt hat, kann man mit einem Zuweisungsoperator nicht mehr den const-Member überschreiben).Aber jetzt verstehe ich auch, warum Dravere diese Frage gestellt hat
Firefighter: ich hatte doch geschrieben, daß man in C++ eben die Initialisierungsliste benutzen muß (anstatt im Konstruktor-Rumpf)...
-
Sorry fuer den Doppelpost, aber ich hab was gefunden.
Schau mal hier das beschreibt eigentlich dein direktes Vorgehen und wurde anscheind schon gemeldet.
http://connect.microsoft.com/VisualStudio/feedback/details/92035/changing-readonly-struct-through-method-fails-silently#details@Th69: Sorry stimmt, nicht gelesen
-
Firefighter schrieb:
Schau mal hier das beschreibt eigentlich dein direktes Vorgehen und wurde anscheind schon gemeldet.
http://connect.microsoft.com/VisualStudio/feedback/details/92035/changing-readonly-struct-through-method-fails-silently#detailsDas ist das andere seltsame Verhalten in meinem zweiten Beitrag. Ist aber anscheinend "as by design", auch wenn es völlig seltsam wirkt.
Informationen darüber, dass ein
readonly
Feld einfach überschrieben wird in einer Struktur, konnte ich nirgends finden. Wie du richtig bemerkt hast, wirdreadonly
in der MSDN nur anhand von Klassen beschrieben. Und ich habe bisher noch keine Seite gefunden, welchereadonly
im Falle von Strukturen erklärt.Deshalb habe ich schlussendlich hier auch den Thread eröffnet. So eine ganz unüberlegte Handlung war das schon nicht
Grüssli
-
Also ich hätte das Verhalten auch so erwartet wie es der Compiler gemacht hat. Sonst würdest du ja auch erwarten dass ein readonly als static aggiert. Oder übersehe ich hier was?
-
@Dravere: Deshalb sag ich: Mach mal nen Ticket bei MS auf
Ne Stellungnahme dazu wuerde mich aber auch mal interessieren
-
Patrickssj6 schrieb:
Also ich hätte das Verhalten auch so erwartet wie es der Compiler gemacht hat. Sonst würdest du ja auch erwarten dass ein readonly als static aggiert. Oder übersehe ich hier was?
Du übersiehst hier, dass man
readonly
Felder im Konstruktor initialisieren kann. Sie können somit einen anderen Wert pro Objekt haben und sind somit nicht statisch. Sonst kannst du nämlichconst
verwenden und dort musst du dann auch keinstatic
hinschreiben.@Firefighter,
Ich habe ganz schlechte Erfahrungen mit der Kontaktaufnahme bei Microsoft gemacht. Im allgemein hat es bei mir bisher schlicht und einfach nicht funktioniert, bzw. es kam keine Antwort
Aber was soll ich dort denn fragen? Ob das ein Bug ist? Da kenne ich die Antwort jetzt schon: "No! Closed as by design!"
Bringt mich nicht weiter.Ich hatte gehofft, dass hier jemand mehr wüsste. Bevor ich mich nämlich an MS wende, werde ich mir mal den C# Standard vornehmen.
Grüssli
-
Im Standard steht im Kapitel zu readonly leider auch nichts zum Thema Structs.
-
Dravere schrieb:
@Zeus,
.... Ich empfinde das Verhalten irgendwie als verkehrt und das Schlüsselwort somit auch als irreführend. Oder ich überseh einfach etwas. Mich erstaunt, dass du dieses Verhalten erwartet hättest. Kanntest du dieses Verhalten schon?Ja, fehlende Gedanken über Transitivität von Eigenschaften im Zusammenhang zwischen Klassen und Strukturen sind mir bekannt.
-
Firefighter schrieb:
Im Standard steht im Kapitel zu readonly leider auch nichts zum Thema Structs.
Du müsstest womöglich eher schauen gehen, was bei der Kopie von Strukturen steht. Wenn dort einfach steht, dass ein
memcpy
oder dergleichen gemacht wird, dann ist es "klar".Grüssli
-
Dravere schrieb:
Firefighter schrieb:
Im Standard steht im Kapitel zu readonly leider auch nichts zum Thema Structs.
Du müsstest womöglich eher schauen gehen, was bei der Kopie von Strukturen steht. Wenn dort einfach steht, dass ein
memcpy
oder dergleichen gemacht wird, dann ist es "klar".Grüssli
Das würde 11.3.3 Assignment / 11.3 Class and struct differences sein, worin readonly nicht eingegangen wird, aber dort wird halt generell auf die das Kopierverhalten hingewiesen.