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
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
zero_x | <span style="font-size: 10;">my</span><span style="font-size: 10;">CSharp</span><span style="font-size: 10;">.de</span> - gemeinsam mehr erreichen
Für längere Zeit inaktiv.
Danke zero_x,
hatte ich ganz vergessen, dass dies bei Klassen automatisch wie gewünscht geschieht. Wie sieht es aus bei Wertetypen wie int?
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
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
zero_x | <span style="font-size: 10;">my</span><span style="font-size: 10;">CSharp</span><span style="font-size: 10;">.de</span> - gemeinsam mehr erreichen
Für längere Zeit inaktiv.
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