1

MainClassにはDataのオブジェクトがあります。Class2を作成するには、 MainDataClass2に渡す必要があります。Class2には、ファイルからDataオブジェクトをロードするLoad関数があります。したがって、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を超えるプロパティがある場合、それはやり過ぎです。

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
}

プロパティに代入する行為は のプロパティClass2dataは何の関係もありません。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-Keyword を介してMainDataの変更が適用されますmaindata

于 2012-10-29T10:54:44.203 に答える