Zeiger auf ein internes Leadonly -Feld bringenC#

Ein Treffpunkt für C#-Programmierer
Anonymous
 Zeiger auf ein internes Leadonly -Feld bringen

Post by Anonymous »

Ich bin tiefer in das Verständnis von Reflexion und Zeigern und stieß auf eine interessante Herausforderung. Sagen Sie, Sie haben die folgende Klasse: < /p>

Code: Select all

namespace Foobar
{
internal class Foo()
{
internal static readonly Me = new Foo();
}
}
< /code>
Ich kann den Wert des Feldes einfach mit folgendem erhalten: < /p>
Assembly a = Assembly.Load("AssemblyWithFoo");
Type t = a.GetType("Foobar.Foo");
FieldInfo fi = t.GetRuntimeFields().First(f => f is { Name: "Me", IsStatic: true });
var bar = fi.GetValue(null);
, aber ein neuer Wert in diesen ist nicht zulässig, da es sich bei der Vergleiche und "Code -Zugriffssicherheit" befindet.

Code: Select all

fi.SetValue(null, new Foo());
Ich habe darüber nachgedacht, Zeiger mit unsicherem zu verwenden, um dieses Feld zu ändern:

Code: Select all

var foo = GetFooFromAssembly();
var bar = fi.GetValue(null);
unsafe
{
object* ptr = &bar;
*ptr = foo;
}
Dies funktioniert insofern, als es die Variable der Balken für Foo ändert, aber nicht das Feld ändert, da die Variable der Balken eine "Kopie" des statischen Feldes ist, nicht das Feld selbst.>

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post