Laden...

im unsafe Modus bei einer vorhandenen Adresse einen Pointer zuweisen, der auf ein Objekt zeigt

Erstellt von mosspower vor 14 Jahren Letzter Beitrag vor 14 Jahren 1.521 Views
mosspower Themenstarter:in
456 Beiträge seit 2007
vor 14 Jahren

[EDIT=herbivore]Abgeteilt von [C#] aus statischer Methode auf Objekt zugreifen[EDIT]

Die Frage ist vielleicht ein bißchen OT, aber passt so schön hier rein.

Kann man denn eigentlich via C# im unsafe Modus bei einer vorhandenen Adresse einen Pointer zuweisen, der auf ein Control, wie hier z.B. Label, zeigt?

5.742 Beiträge seit 2007
vor 14 Jahren

Die Frage ist vielleicht ein bißchen OT, aber passt so schön hier rein.

Ähm - wie kommst du denn jetzt darauf?!?

Kann man denn eigentlich via C# im unsafe Modus bei einer vorhandenen Adresse einen Pointer zuweisen, der auf ein Control, wie hier z.B. Label, zeigt?

Wenn ich dich richtig verstanden habe, macht das in nur ca. 0,001% aller Anwendungsfälle auch tatsächlich Sinn.
Was genau hast du vor?

mosspower Themenstarter:in
456 Beiträge seit 2007
vor 14 Jahren

@winSharp93,

OK, dann eben nicht OT.

Die 0.001% wären doch eine (aber nicht die) Lösung auf die Ausgangsfrage des Threaderstellers. Jetzt habe ich mich gefragt, ob dies überhaupt in C# möglich ist.

Komme ich via C# von einer Adresse auf einen Pointer und dann auf z.B. ein Property?

Wenn ja, was ich nicht glaube, wie?

5.742 Beiträge seit 2007
vor 14 Jahren

Die 0.001% wären doch eine (aber nicht die) Lösung auf die Ausgangsfrage des Threaderstellers.

Ähm - nein?!?
Was soll denn da ein unmanaged Pointer weiterhelfen?

Von der theoretischen Machbarkeit gibt es die GCHandle-Struktur - alle Beispiele, an die ich mich so halbwegs noch erinnern kann handeln aber von Parametern, die man sich an einen Callbacks, das man an eine unmanaged DLL übergibt, übergeben lassen möchte.

mosspower Themenstarter:in
456 Beiträge seit 2007
vor 14 Jahren

In C (oder C++) ist es jederzeit möglich, eine physikalische Speicheradresse auf einen Pointer zu mappen. Dieser kann dann auf Instanzvariablen usw. des Objektes zugreifen.
Man könnte, jetzt mal den Sinn einer solchen Aktion außer acht gelassen, einer statischen Methode die Speicheradresse übergeben.

Ist aber in C# nicht möglich, denn ...

... in C# pointer can only be declared to hold the memory address of value types and arrays...

>

3.170 Beiträge seit 2006
vor 14 Jahren

Hallo mosspower,

In C (oder C++) ist es jederzeit möglich, eine physikalische Speicheradresse auf einen Pointer zu mappen. Dieser kann dann auf Instanzvariablen usw. des Objektes zugreifen. In C# sind Referenztypen ja schon so etwas wie ein Pointer in C++. Eine Variable vom Typ System.Object entspricht dann in etwa einem void*.
Was in C# AFAIK nicht geht (habs aber auch noch nie gebraucht und mich daher nie genau kundig gmacht) sind Doppelzeiger wie void**, sowas ähnliches entsteht aber wenn man Referenztypen per "ref" oder "out" übergibt.

Gruß, MarsStein

Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca

49.485 Beiträge seit 2005
vor 14 Jahren

Hallo mosspower,

Die Frage ... passt so schön hier rein.

nein, tut sie überhaupt nicht.

Die Frage ist vielleicht ein bißchen OT

Nein, sie ist vollkommen offtopic.

Kann man denn eigentlich via C# im unsafe Modus bei einer vorhandenen Adresse einen Pointer zuweisen, der auf ein Control, wie hier z.B. Label, zeigt?

Hast du alle Grundlagen vergessen? Control ist - wie alle Klassen - ein Referenztyp. Daher enthält eine Variable von Typ Control immer eine Referenz auf das Objekt. Und eine Referenz ist letztlich nichts anders als die Adresse des Objekts. unsafe ist also nicht nur nicht nötig, sondern vollkommen unangebracht.

Komme ich via C# von einer Adresse auf einen Pointer und dann auf z.B. ein Property?

Natürlich! Genauso wie man von einer normalen Referenzvariable auf eine Property kommt. Weshalb man - um es nochmal nachdrücklich zu sagen - überhaupt keinen Pointer braucht.

Man könnte, jetzt mal den Sinn einer solchen Aktion außer acht gelassen, einer statischen Methode die Speicheradresse übergeben.

Genau das scheint mir hier das Problem zu sein, dass du nämlich den Sinn vollkommen aus den Augen verloren hast.

herbivore