Laden...

ref int als Member einer Klasse ablegen

Erstellt von Tr1umph vor 12 Jahren Letzter Beitrag vor 12 Jahren 1.466 Views
T
Tr1umph Themenstarter:in
58 Beiträge seit 2011
vor 12 Jahren
ref int als Member einer Klasse ablegen

Hi

Ich übergebe einer Klasse per Konstruktor eine Refferenz auf nen int. Diese Refferenz würde ich in dieser Klasse jetzt gerne speichern, so dass die neue Klasse immer den aktuellen int-Wert hat.

In C++ wäre das mit Pointern relativ einfach gewesen. Aber wie regelt man das in C#?

class blub
{
     int x;

     public blub(ref int y)
     {
          x = y;
     }
}

Gruß

6.911 Beiträge seit 2009
vor 12 Jahren

Hallo Tr1umph,

in C# geht das so nicht da int ein Werttyp ist, aber mit der INotifyPropertyChanged-Schnittstelle lässt sowas ähnliches bewerkstelligen wie du vorhast.

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"

G
538 Beiträge seit 2008
vor 12 Jahren

Nur aus interesse - würde das hier auch zum gewünschten Ergebnis führen?


  public class Ref<T> where T : struct
    {
        public T Value { get; set; }

        public static implicit operator T( Ref<T> imp )
        {
            return imp.Value;
        }

        public Ref() {}

        public Ref(T value)
        {
            Value = value;
        }
    }

Der Vorteil der Klugheit liegt darin, dass man sich dumm stellen kann - umgekehrt ist das schon schwieriger (K. Tucholsky)
Das Problem mit Internet-Zitaten ist, dass sie oftmals zu unrecht als authentisch angenommen werden. (K. Adenauer)

49.485 Beiträge seit 2005
vor 12 Jahren

Hallo Grumbler85,

den Wert in eine Klasse packen - egal ob man so eine allgemeinen Klasse verwendet, wie du sie geschrieben hast oder ob man eine eigene spezielle Klasse schreibt - löst natürlich vordergründig das Problem (Klassen sind Referenztypen, weshalb Änderungen an einem referenzierten Objekt an alle Stellen durchschlagen, von denen das Objekt referenziert wird), nur sollte man sich immer fragen, warum sich der Wunsch überhaupt ergibt und ob es für die eigentliche Ursache nicht bessere Lösungen gibt, z.B. das schon genannte INotifyPropertyChanged. Es kommt also immer darauf an, was man eigentlich erreichen will. Daher wird man meistens ohne eine solche Klasse, wie du die geschrieben hast, auskommen.

herbivore

G
538 Beiträge seit 2008
vor 12 Jahren

Ich nutze das so nicht - ich wollte nur mal hören, ob das dieses "ref int"-speichern Problem lösen würde (und das würde es wohl) - war aus reiner wissbegierde.

Der Vorteil der Klugheit liegt darin, dass man sich dumm stellen kann - umgekehrt ist das schon schwieriger (K. Tucholsky)
Das Problem mit Internet-Zitaten ist, dass sie oftmals zu unrecht als authentisch angenommen werden. (K. Adenauer)

T
Tr1umph Themenstarter:in
58 Beiträge seit 2011
vor 12 Jahren

Wenn ich das jetzt auf die schnelle mit dem INotifyPropertyChanged richtig verstanden habe müsste meine Klasse davon abgeleitet werden?

Das Problem davon ist, dass die Klasse die den int zur Verfügung stellen soll bereits von einer anderen Klasse abgeleitet ist. Soweit ich weiß gibt es ja in C# keine Mehrfachvererbung?

49.485 Beiträge seit 2005
vor 12 Jahren

Hallo Tr1umph,

INotifyPropertyChanged ist eine Schnittstelle. Eine Klassen kann von beliebig vielen Schnittstellen "erben" (genauer: beliebig viele Schnittstellen implementieren).

herbivore