C#類似傳址的問題

無聊問一個像傳址的問題

(我要問的是C#,不是C或C++)

class Class1

{

int i;

//.........

}

class Class2

{

Class1 c1;

public void setClass1(Class1 c)

{

this.c1 = c;

}

}

上面是兩個類別,然後寫下面的程式碼

Class1 A = new Class1();

Class2 B = new Class2();

B.setClass1(A);

利用Class2的setClass1方法,把A變數的物件參照給B的成員變數c1

我的問題是....

若再上面程式之後A又去new Class1()

如何才能讓B.c1跟著A跑

Class1 A = new Class1();

B.setClass1(A); //B.c1和A參照到同一記憶體區段

A = new Class1(); //A去參照新的記憶體區段了,但B.c1仍在參照舊的

也就是說C#有辦法讓B只在程式開頭只執行一次setClass1()方法,

之後無論A變數去參照哪,B.c1也跟著去A跑嗎??

有點類似C&C++指標的指標的用法(我亂說的,我對C&C++不了,是不是這樣不知)

2 Answers

Rating
  • 歌篾
    Lv 4
    1 decade ago
    Favorite Answer

    可以試試看用delegate的方法:

    // 先宣告一個會返回class1物件的delegate

    delegate Class1 Class1Delegate();

    // Class1類別

    class Class1

    {

    public int i;

    }

    // Class2類別

    class Class2

    {

    // 傳入Class1Delegate

    public Class1Delegate Class1Delegate

    {

    set { class1Delegate = value; }

    }

    // 顯示Class1的值

    public void showClass1()

    {

    Console.WriteLine("{0}", class1Delegate().i));

    }

    Class1Delegate class1Delegate;

    }

    然後在主程序中:

    // class1的值是1

    Class1 class1 = new Class1();

    class1.i = 1;

    Class2 class2 = new Class2();

    // 建置一個返回class1的delegate

    class2.Class1Delegate = delegate() { return class1; };

    // 在class2中顯示class1的值

    class2.showClass1();

    // class1是新的物件,值為2

    class1 = new Class1();

    class1.i = 2;

    // 在class2中顯示新物件class1的值

    class2.showClass1();

    2010-07-08 02:49:12 補充:

    抱歉

    Console.WriteLine("{0}", class1Delegate().i));

    那行最後多了一個)

    2010-07-08 22:51:15 補充:

    class2.Class1Delegate = delegate() { return class1; };

    也可以用Lamda運算式 (http://msdn.microsoft.com/zh-tw/library/bb397687.a... 來表示:

    class2.Class1Delegate = () => class1;

  • 1 decade ago

    public void setClass1(Class1 c) -> public void setClass1(ref Class1 c)

    試試看

Still have questions? Get your answers by asking now.