这是我要问的一个相当人为的例子:
public partial class Form1 : Form
{
private Fruit fruit;
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
fruit = new Apple();
Geneticist geneticist = new Geneticist(fruit);
// Later on in program..
geneticist.Engineer();
Console.WriteLine(fruit.Color);
// Still red because a copy of fruit was made in Geneticist class.
}
}
class Fruit
{
public string Color { get; set; }
}
class Apple : Fruit
{
public Apple()
{
Color = "Red";
}
}
class Banana : Fruit
{
public Banana()
{
Color = "Yellow";
}
}
class Geneticist
{
private Fruit fruit;
private Banana banana;
public Geneticist(Fruit fruit)
{
this.fruit = fruit;
this.banana = new Banana();
}
public void Engineer()
{
fruit = banana;
}
}
基本上,我在主表单中存储了一个水果作为成员变量。我希望能够将它传递给我的遗传学家类,然后让它重新分配值。
当我fruit = banana;
在遗传学家中键入水果时,不再指向 Form1 水果,而是指向遗传学家中的本地副本。我想我正在寻找一种模拟 ref 关键字的方法,如果我重新分配遗传学家水果,Form1 水果也会随着变化而更新。
我想我可以创建一个水果包装并将其传递给周围,但这似乎有点骇人听闻。我也可以让Engineer
方法引发一个事件,以便主窗体可以重新分配值,但在我的程序的许多部分必须这样做似乎也有点混乱。
另外,我不能使用ref
关键字,因为我稍后会修改它,而不是在 Geneticist 的构造函数中。
谢谢阅读!