2011-02-08 15 views
5

खोजने के लिए प्रतिबिंब का उपयोग करना मुझे उत्सुकता है यदि किसी ने कक्षा में प्रतिबिंबित करने के लिए कोई कोड लिखा है और इसकी बहिष्कृत विधियां पाई हैं?बहिष्करण

आईवी ने प्रतिक्रियाशील के लिए एक टी 4 टेम्पलेट चाबुक किया है और इसे किसी भी चालाक हैकर्स के लिए हैंडलर उत्पन्न करना बंद करना पसंद करेंगे, जो पहले से ही मुझे पंच पर मार देते हैं?

+0

क्या आप टी 4 के साथ प्रतिबिंब का उपयोग कर रहे हैं? यह [अनुशंसित नहीं है] (http://www.olegsych.com/2007/12/how-to-use-t4-to-generate-decorator-classes/)। – Ani

+0

क्या आपका मतलब अप्रचलित के रूप में चिह्नित सदस्यों (प्रतिक्रियाशील ढांचे का वह हिस्सा है?) – RQDQ

+0

यूआई प्रतिनिधियों से ऑब्जर्वेबल उत्पन्न करने के लिए एक टी 4 टेम्पलेट संशोधित किया गया है और यह बहिष्कृत घटनाओं को उठाएगा, मुझे बस उन्हें पीढ़ी में फ़िल्टर करने की आवश्यकता है। –

उत्तर

8

मुझे नहीं पता कि आप टी 4 ढांचे के लिए पूछ रहे हैं या नहीं, लेकिन यहां अप्रचलित ध्वजांकित विधियों के लिए एक सामान्य प्रतिबिंब नमूना है।

class TestClass 
{ 
    public TestClass() 
    { 
     DeprecatedTester.FindDeprecatedMethods(this.GetType()); 
    } 

    [Obsolete("SomeDeprecatedMethod is deprecated, use SomeNewMethod instead.")] 
    public void SomeDeprecatedMethod() { } 

    [Obsolete("YetAnotherDeprecatedMethod is deprecated, use SomeNewMethod instead.")] 
    public void YetAnotherDeprecatedMethod() { } 

    public void SomeNewMethod() { }   
} 

public class DeprecatedTester 
{ 
    public static void FindDeprecatedMethods(Type t) 
    { 
     MethodInfo[] methodInfos = t.GetMethods(); 

     foreach (MethodInfo methodInfo in methodInfos) 
     { 
      object[] attributes = methodInfo.GetCustomAttributes(false); 

      foreach (ObsoleteAttribute attribute in attributes.OfType<ObsoleteAttribute>()) 
      { 
       Console.WriteLine("Found deprecated method: {0} [{1}]", methodInfo.Name, attribute.Message); 
      } 
     } 
    } 
} 
+1

पूर्णता, धन्यवाद दोस्त। –

+0

आपका स्वागत है। – HuseyinUslu

+5

वैसे, GetCustomAttributes() ओवरलोड हो गया है और एक प्रकार पैरामीटर ले सकता है। तो यह जांचने के लिए कि क्या कोई विधि बहिष्कृत है, आप बस 'टाइपऑफ (अप्रचलित एट्रिब्यूट)' पास करते हैं। मैं जिस चेकर का उपयोग कर रहा हूं (एनम मानों के लिए) है: 'वापसी obj.GetType()। GetField (obj.ToString())। GetCustomAttributes (typeof (System.ObsoleteAttribute), सत्य)। तरंगदैर्ध्य> 0;' – piojo

संबंधित मुद्दे