Yansıma yoluyla anonim yöntemleri nasıl tanımlayabilirsiniz?System.Reflection içinde anonim yöntemler nasıl tanımlanır
cevap
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
Ve başka herhangi bir yöntem (veya üye/tip) olabilir. – leppie
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. –
Otomatik özellikler için ve mülk alıcıları ve ayarlayıcıları için. – leppie
, IL: düzeyinde anonim yöntemle diye bir şey yoktur, çünkü
<(\w|_)+>b_.+
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).
+1: Bu teknik olarak, "doğru" cevabı - ama [CompilerGenerated] uygulamada oldukça güvenilir bir şekilde çalışıyor. –
Neyi başarmak istediğiniz hakkında biraz daha bilgi verebilir misiniz? –