【发布时间】:2025-12-13 20:15:01
【问题描述】:
这是我所问的一个相当人为的例子:
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 的构造函数中。
感谢阅读!
【问题讨论】:
-
如果您不想将 Form1 和遗传学家紧密结合起来,那么这个事件听起来是个好主意。