Laden...

Referenz zu einem Objekt?

Erstellt von Tyrex vor 13 Jahren Letzter Beitrag vor 13 Jahren 1.485 Views
Thema geschlossen
T
Tyrex Themenstarter:in
7 Beiträge seit 2010
vor 13 Jahren
Referenz zu einem Objekt?

Hallo,

ich muss mit einem Objekt (z.B.) this.Ausstattung.Innenraum vom Typ class1 arbeiten und möchte den Namen abkürzen. Schreibe ich class1 obj1 = this.Ausstattung.Innenraum; so habe ich den Nachteil, dass Änderungen bei obj nicht auf das Ursprungsobjekt übertragen werden.

Eine Lösung wäre es eine Methode zu schreiben, welche die entsprechenden Änderungen an obj durchführt und das Ursprungsobjekt mit dem Stichwort "ref" an diese Methode zu übergeben.

Gibt es aber auch eine andere leichtere Möglichkeit? (a la class1 obj1 = ref of this.Ausstattung.Innenraum)

Vielen Dank

1.044 Beiträge seit 2008
vor 13 Jahren

Hallo Tyrex,

wenn es Klassen sind, werden die Referenzen automatisch übernommen, sprich wenn beide auf das gleiche referenzieren, ändern sich auch beide Werte. Beispiel:

public class TestA
{
    public TestA()
    {
        this.TestB = new TestB();
    }

    public TestB TestB { get; set; }
}

public class TestB
{
    public string Value { get; set; }
}


TestA testA = new TestA();
TestB testB = testA.TestB;

testA.TestB.Value = DateTime.Now.ToString();

Console.WriteLine(testA.TestB.Value);
Console.WriteLine(testB.Value);

this.Ausstattung.Innenraum wäre somit gleichzusetzen mit obj1.

zero_x

T
Tyrex Themenstarter:in
7 Beiträge seit 2010
vor 13 Jahren

Danke zero_x,

hatte ich ganz vergessen, dass dies bei Klassen automatisch wie gewünscht geschieht. Wie sieht es aus bei Wertetypen wie int?

1.346 Beiträge seit 2008
vor 13 Jahren

Bei Wertetypen funktioniert das (so) nicht.


int i = 5;
int u = i;
u = 10;
Console.WriteLine(i); //5
Console.WriteLine(u); //10


Da gibt es aber die Möglichkeit aus einem Wertetyp einen Referenztyp zu machen, bzw. ihn in einem Referenztyp zu Kapseln.


int? i = 5;
int? u = i;
u.Value = 10;
Console.WriteLine(i); //10
Console.WriteLine(u) //10

Das ? ist im grunde nur eine Abkürzung für den Generischen Typ Nummable<T>
d.h. int? = Nullable<int>. Wie der Name schon sagt besteht so auch die Möglichkeit (indirekt) einen Wertetyp null zu machen.

Ob das aber in deinem Fall wirklich das ist was du willst, bzw. was am sinnvollsten ist wage ich zu bezfeilen

1.044 Beiträge seit 2008
vor 13 Jahren

Hallo Tyrex,

[Hinweis] Wie poste ich richtig? Punkt 1.1.1. Mehr findest du in der :rtfm: MSDN und in Büchern 🛈 📗.

Bei Wertetypen ist es anders. Dort ist dann das Verhalten so, wie du es oben beschrieben hast. Merke: Strukturen = Wertetypen, Klassen = Referenztypen.

zero_x

3.170 Beiträge seit 2006
vor 13 Jahren

Hallo,

bei einem Werttyp geht das nicht, da bei jeder Zuweisung an eine Variable eine Kopie des Objekts erstellt wird.
Dabei muss man also den Weg gehen, den Werttyp nach Änderung wieder der ursprünglichen Variable zuzuweisen.

struct MyStruct
{
  public int a;
  public int b;
}

MyStruct my = SomeClass.MyStructProperty;
my.a = 5;
SomeClass.MyStructProperty = my;

Gruß, MarsStein

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

T
Tyrex Themenstarter:in
7 Beiträge seit 2010
vor 13 Jahren

Danke für Antworten! Case closed 😉

Thema geschlossen