1

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"; 来更改它。但如果 Data 有超过 100 个属性,那就是矫枉过正了;

4

4 回答 4

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);
于 2012-10-29T10:50:14.143 回答
1

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

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

private Data changeData()
{
    Data test = new Data();
    test.Name = "newData";
    data = test;
}
于 2012-10-29T10:52:02.630 回答
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无关。MainClassMainData

此代码会影响共享Data对象:

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

}

于 2012-10-29T10:50:27.413 回答
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;
    }
}

通过 ref-KeywordMainData将应用maindata.

于 2012-10-29T10:54:44.203 回答