2012-06-20 33 views
18

Küçük projemde, yürütülebilir kod üretmek için System.Reflection sınıfları kullanıyorum. Özel bir türün + işlecini aramam gerekiyor. C# yansımasını kullanarak özel sınıfın özelleştirilmiş operatörünü nasıl arayabilirim bilen var mı?Yansıma özel işçiye nasıl çağrı yapılır

cevap

22

C gibi # derleyicisi adıyla op_XXXX ile fonksiyonlara operatörü aşırı dönüştürür:

operator== ->op_Equality
operator!= ->op_Inequality
operator+ ->op_Addition
operator- ->op_Subtraction
operator< ->op_LessThan
operator> ->op_GreaterThan
operator<= ->op_LessThanOrEqual
operator>= ->op_GreaterThanOrEqual
ve benzeri.

Yani DateTime yapının operator+ yöntemini almak için, yazmak gerekir:

MethodInfo mi = typeof(DateTime).GetMethod("op_Addition", 
    BindingFlags.Static | BindingFlags.Public); 
+1

Sadece merak :) Ne aynı imzaya sahip bir statik 'op_Addition' yöntemi varsa? –

+1

@ ŞafakGür Daha sonra "Type ''," op_Addition "adlı bir üye ile aynı parametre türlerini tanımlayan bir derleyici hatası alırsınız". Tanımlanan operatör yöntemi, daha önce belirtilen adla tam olarak yeniden adlandırıldığı için, aynı sınıfta ikisine sahip olamazsınız. –

+0

Ve döküm operatörleri için adlandırma kuralı ne olurdu? – Grx70

1

Özel operatörünüzü, Class ürününüzün property yapmasını sağlayın. Ve sonra property ve value numaralarına reflection aracılığıyla erişin. XXXX operasyon olduğu

PropertyInfo pinfo = obj.GetType().GetProperty("CustomOperator", BindingFlags.Public | BindingFlags.Instance); 
string customOperator = pinfo.GetValue(obj,null) as string; 
6
typeof(A).GetMethod("op_Addition").Invoke(null, instance1, instance2); 
İlgili konular