Das Attribut ist wichtig in einem Fall, in dem Sie Remoting verwenden, wie eine von MarshalByRefObject abgeleitete Klasse. Ihr Code arbeitet dann mit einem Proxy im Client-Programm, einem falschen Klassenobjekt, das genau wie die ursprüngliche Klasse aussieht, dessen Methoden jedoch von der CLR implementiert werden, und die Methodenargumente auf das eigentliche Objekt auf dem Server serialisiert. In der Regel auf einem anderen Computer.
Felder sind ein Problem in einer solchen Klasse, sie können nicht mit einer Ersatzmethode gefälscht werden. Dies ist etwas, mit dem der Jitter umgeht. Wenn es Zugriff auf ein Feld in einem MRBO-Objekt erkennt, generiert es nicht den Code, um das Feld direkt zu lesen/schreiben, es ruft stattdessen eine Hilfsmethode in der CLR auf. Welche weiß, ob das Objekt ein Proxy oder das reale Objekt ist und gibt entweder den Feldwert direkt zurück oder macht stattdessen einen Remoting-Aufruf.
Das fügt natürlich Overhead hinzu, ein Problem mit einem statischen Feld, auf das sehr häufig zugegriffen werden kann. Das [ContextStatic] -Attribut sagt, dass es Ihnen nicht wichtig ist, den tatsächlichen statischen Feldwert zu haben, die lokale Kopie davon ist gut genug. Oder es kann absichtlich verwendet werden, wenn es aus irgendeinem Grund wichtig ist, den Status lokal zu verfolgen. Ich kann mir kein gutes Beispiel dafür vorstellen. Auch die Rahmenprogrammierer wurden nicht innerhalb des Framework-Codes verwendet.
Ich denke, es von .NET Remoting und seine Kontextklassen – Jehof
verwendet wird Siehe [diese Antwort] (http://forums.asp.net/post/2428493.aspx). – Magnus
Die Dokumentation hat einen Link zu ['Context'] (http://msdn.microsoft.com/en-US/library/system.runtime.remoting.contexts.context.aspx):" Sobald ein Objekt platziert wurde ein Kontext, bleibt es für das Leben. Klassen, die an einen Kontext gebunden werden können, werden kontextgebundene Klassen genannt. Wenn auf sie von einem anderen Kontext aus zugegriffen wird, wird auf solche Klassen direkt mit einem Proxy verwiesen. " –