これは C# 4.0 です。
WeakReference
私はそのようないくつかの s に sを格納するクラスを持ってAction
います:
public class LoremIpsum
{
private Dictionary<Type, List<WeakReference>> references = new Dictionary<Type, List<WeakReference>>();
public void KeepReference<T>(Action<T> action)
{
if (this.references.ContainsKey(typeof(T)))
{
this.references[typeof(T)].Add(new WeakReference(action));
}
else
{
this.references.Add(typeof(T), new List<WeakReference> { new WeakReference(action) });
}
}
}
このクラスにはAction
、後で渡された s を実行できる別のメソッドがありますが、この質問ではほとんど重要ではありません。
このクラスを次のように消費します。
public class Foobar
{
public Bar Bar { get; set; }
public void Foo(LoremIpsum ipsum)
{
ipsum.KeepReference<Bar>((b) => { this.Bar = b; });
ipsum.KeepReference<Bar>(this.Whatever);
}
public void Whatever(Bar bar)
{
// Do anything, for example...:
this.Bar = bar
}
}
Bar
私のアプリケーションでは 3 番目のクラスです。
私の質問:
メソッドで、渡されたパラメーターが匿名メソッド ( ) を参照しているか、具象メソッド ( ) を参照しKeepReference
ているかをどのように確認できますか?Action
this.Bar = b;
this.Whatever
のプロパティを確認しましたaction
。action
(のようなIsAbstract
) の種類のプロパティが見つかりませんでしたIsAnonymous
。コンパイル後にildasmで匿名メソッドが通常のメソッドに「なった」ことがわかるので、基になる型はMethodInfo
理にかなっていFoobar
ます。Ildasm では、匿名メソッドが完全なピンク色の四角形ではなく、ピンク色で囲まれた白い四角形であることもわかります。その定義には、いくつかの CompilerServices クラスへの呼び出しがありますが、C# でこれを利用する方法がわかりません。の本質を知ることができると確信していaction
ます。私は何が欠けていますか?