更改对象但不是引用c#

时间:2012-10-29 10:42:59

标签: c# .net data-binding reference

MainClass 有一个Data对象。 要创建 Class2 ,我必须将 MainData 提供给 Class2 。 在Class2中有一个Load函数,用于从文件加载Data对象。因此MainData对象应该更改为新对象。

在Class2中,Data对象被绑定到控件。

这是一个简单的例子:

class MainClass {
    public Data Maindata { get; set; }
    private Class2 cla;
    public MainClass() {
        Maindata = new Data();
        Maindata.Name = "Maindata";
        Console.WriteLine("Class1.MainData = " + Maindata.Name);
        cla = new Class2(Maindata);
        //Here should Maindata.Name = newData
        Console.WriteLine("Class1.MainData = " + Maindata.Name);
    }
}
class Class2 {
    public Data data { get; set; }
    public Class2(Data maindata) {
        data = maindata;
        changeData();
        Console.WriteLine("Class2.Data = "+data.Name);
    }

    private void changeData() {
        Data test = new Data();
        test.Name = "newData";
        data = test;
    }
}
class Data {
    public string Name { get; set; }
}

我知道你可以通过做data.Name =“newData”来改变它; 但如果数据有超过100个属性,那就是Overkill;

4 个答案:

答案 0 :(得分:2)

您可以更改现有对象,而不是创建新对象:

private void changeData() {
    data.Name = "newData";
}

如果您想创建新对象,则需要Class2了解MainClass,以便它可以更改属性:

public Class2(MainClass main) {
    changeData();
    main.Maindata = data;
    Console.WriteLine("Class2.Data = "+data.Name);
}

并使用MainClass对象而不是Maindata对象调用它:

cla = new Class2(this);

答案 1 :(得分:1)

虽然我会质疑“你为什么要这样做?”,但是关于如何将构造函数中新创建的对象传递给调用它的方法的具体问题的答案将使用“out”来完成关键字:

public Class2(out Data maindata) 
{
    changeData();
    maindata = data;
}

private Data changeData()
{
    Data test = new Data();
    test.Name = "newData";
    data = test;
}

答案 2 :(得分:0)

这一切都在做:

private void changeData() {
    Data test = new Data();
    test.Name = "newData";
    data = test; //assign the new object to the property data in Class2
}

分配给Class2媒体资源data的行为与MainClass的{​​{1}}媒体资源无关。

此代码会影响共享的MainData对象:

Data

}

答案 3 :(得分:0)

您可以执行以下操作:

class Class2 {
    public Data data { get; set; }
    public Class2(ref Data maindata) {
        data = maindata;
        changeData();
        maindata = data;
        Console.WriteLine("Class2.Data = "+data.Name);
    }

    private void changeData() {
        Data test = new Data();
        test.Name = "newData";
        data = test;
    }
}

通过参考关键字MainData将应用maindata的更改。

相关问题