これは、私が求めていることのかなり不自然な例です。
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;
}
}
基本的に、メイン フォームにフルーツをメンバー変数として格納しています。それを Geneticist クラスに渡し、後で値を再割り当てできるようにしたいと考えています。
Geneticist でフルーツを入力fruit = banana;
すると、Form1 フルーツではなく、Geneticist のローカル コピーがポイントされます。ref キーワードをシミュレートする方法を探しています。ここで、遺伝学者の果物を再割り当てすると、Form1 の果物も変更で更新されます。
果物のラッパーを作成して、代わりにそれを渡すことができると思いますが、それは少しハックのようです。またEngineer
、メインフォームが値を再割り当てできるようにメソッドにイベントを発生させることもできますが、プログラムの多くの部分でそれを行う必要があるのも少し面倒です。
また、ref
Geneticist のコンストラクターではなく、後で変更するため、キーワードを使用できません。
読んでくれてありがとう!