Warum legt ein schreibgeschütztes Feld mit der dynamischen Methode einen Fehler in dieser Klasse an?

8

Man kann in einem schreibgeschützten Feld einer Klasse mit dem strfld op-Code in der dynamischen Methode speichern, wenn der Besitzer auf diese Klasse gesetzt ist und JIT-Prüfungen deaktiviert sind. Ein Beispiel ist hier . Dieser Ansatz konnte jedoch nicht mit der Klasse funktionieren, die aus F # stammt, nämlich FSharpOption . Bitte analysieren Sie ein Beispiel unten:

%Vor%

Als Erstes müssen Sie auf die FSharp.Core-Bibliothek verweisen, um sie auszuführen. Dann können Sie durch Ändern von #if true in #if false zwischen dem Schreiben eines schreibgeschützten Felds für Tuple und FSharpOption wechseln. Bei ersterem funktioniert es perfekt, obwohl beide eine ähnliche Struktur haben, dh ein einzelnes schreibgeschütztes Feld, das über die Eigenschaft zugänglich ist. Für Letzteres verursacht es Verifikationsfehler. Warum ist das so?

    
konrad.kruczynski 13.08.2015, 13:44
quelle

1 Antwort

2

Sehr sehr späte Antwort. Das ist sehr merkwürdig. Ersetzen Sie MyType durch das Modul des Feldtyps. Alles beginnt zu arbeiten

%Vor%

Wird:

%Vor%

Das ist:

%Vor%

wird

%Vor%

Der Typ des Feldes, das gesetzt wird, ist string , also nehmen wir das Modul davon. Ich würde gerne eine bessere Erklärung zu warum das ist hören.

Die Handlung wird dicker

es stellt sich heraus, dass typeof(string).module es für jeden Typ funktioniert. auch wenn ich meinen eigenen Typ so definiere:

%Vor%

Jetzt macht nichts Sinn. Der FSharpOption-Typ lebt im F # -Modul. Die Poco-Klasse lebt in meinem Programm-Modul. und immer noch funktioniert alles, wenn das Modul bestanden ist das Corelib-Modul. Aber nicht, wenn ich eines der beiden (oben genannten) passiere, die Sinn machen würden.

    
Roger Johansson 30.07.2016 08:18
quelle

Tags und Links