2010-03-23 16 views

cevap

7

Yöntemin özniteliklerine bakın ve yöntemin CompilerGeneratedAttribute ile dekore edilmiş olup olmadığına bakın.

Anonim yöntemler (otomatik olarak uygulanan özellikler gibi diğer nesnelerin yanı sıra) de bu öznitelik eklenecektir. Örneğin, sınıfınız için bir türünüz olduğunu varsayalım.

Type myClassType = typeof(MyClass); 
IEnumerable<MethodInfo> anonymousMethods = myClassType 
    .GetMethods(
      BindingFlags.NonPublic 
     | BindingFlags.Public 
     | BindingFlags.Instance 
     | BindingFlags.Static) 
    .Where(method => 
      method.GetCustomAttributes(typeof(CompilerGeneratedAttribute)).Any()); 

Bu MyClass üzerinde tanımlı herhangi anonim yöntemleri dönmelidir: Anonim yöntemler olacaktır. Regex desen olacağını görebiliyorum kadarıyla

+0

Ve başka herhangi bir yöntem (veya üye/tip) olabilir. – leppie

+0

Doğru - bunu herhangi bir yöntemde el ile tanımlayabilir ve onu kandırabilirsiniz, ancak genellikle, bu anonim yöntemler ve diğer derleyici tarafından oluşturulan bilgiler için kullanılır. –

+0

Otomatik özellikler için ve mülk alıcıları ve ayarlayıcıları için. – leppie

4

, IL: düzeyinde anonim yöntemle diye bir şey yoktur, çünkü

<(\w|_)+>b_.+ 
7

Yapamazsın, - hepsi İsminin ve tüm aittir adlandırılmış türler. Ve C# ve VB derleyicileri, anonim yöntemleri adlandırılmış yöntem ve türlere çevirme yönteminin tamamen uygulanmasıyla tanımlanmış olup, bunlara güvenilemez (bu, örneğin, küçük sürümlerde/düzeltmelerde bile herhangi bir güncelleştirmeyle değişebilir).

+3

+1: Bu teknik olarak, "doğru" cevabı - ama [CompilerGenerated] uygulamada oldukça güvenilir bir şekilde çalışıyor. –

İlgili konular