どのように変数をキャプチャしますか?
また、オブジェクト参照への参照を保存することはできますか?どのように変数をキャプチャしますか(C#)
通常、メソッドはref
というキーワードを使用して、その外部の変数を変更できます。
void Foo(ref int x)
{
x = 5;
}
void Bar()
{
int m = 0;
Foo(ref m);
}
これは明快で簡単です。
今度は、同じことを達成するためのクラスを考えてみましょう:
class Job
{
// ref int _VarOutsideOfClass; // ?????
public void Execute()
{
// _VarOutsideOfClass = 5; // ?????
}
}
void Bar()
{
int m = 0;
var job = new Job()
{
_VarOutsideOfClass = ref m // How ?
};
job.Execute();
}
私はそれを正しく書くにはどうすればよいですか?
コメント:それはキューに起動したとき、通常Execute()
は、別のスレッドでやや後に呼び出されますので、私は、それref
引数を持つメソッドにすることはできません。
class Job
{
public Func<int> InParameter;
public Action<int> OnResult;
public void Execute()
{
int x = InParameter();
OnResult(5);
}
}
void Bar()
{
int m = 0;
var job = new Job()
{
InParameter =() => m,
OnResult = (res) => m = res
};
job.Execute();
}
...多分良いアイデアがあります:
現在、私はラムダをたっぷり使って試作品を作りました。
あなたの解決策は私にはかなり良いようです... –