readonly in struct ist nicht wirklich readonly



  • @Dravere: Ich hab auch gerade nochmal in der MSDN und im Standard nachgeschaut und dort wird das readonly Schluesselwort immer im Zusammenhang mit Klassen beschrieben. Mir scheint also als wenn sie da geschlampt haben. Kannst ja mal bei Microsoft nen Ticket auf machen und mal schauen was die dazu sagen 🙂



  • 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 🙂


  • Administrator

    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#details

    Das 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, wird readonly in der MSDN nur anhand von Klassen beschrieben. Und ich habe bisher noch keine Seite gefunden, welche readonly 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 🙂


  • Administrator

    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ämlich const verwenden und dort musst du dann auch kein static 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



  • @Dravere:

    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.


  • Administrator

    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.


Anmelden zum Antworten