Trending News
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
- 歌篾Lv 41 decade agoFavorite 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;