2017-02-06 22 views
5

मेरे वर्ग संरचना (सरलीकृत)जेनेरिक प्रकार

interface Foo<T> { } 
abstract class Bar1 : Foo<SomeClass> { } 
abstract class Bar2 : Foo<SomeOtherClass> { } 
class FinalClass1 : Bar1 { } 
class FinalClass2 : Bar2 { } 

अब, केवल प्रकार FinalClass1 और FinalClass2 मैं फू इंटरफ़ेस से अपने-अपने टी प्रकार के प्राप्त करने की आवश्यकता होने - FinalClass2 के लिए FinalClass1 और SomeOtherClass के लिए SomeClass । अमूर्त वर्ग अधिक सामान्य इंटरफेस लागू कर सकते हैं, लेकिन हमेशा केवल एक फू।

  1. प्रतिबिंब का उपयोग करके मैं इसे कैसे प्राप्त कर सकता हूं?

  2. मैं यह भी कैसे सुनिश्चित कर सकता हूं कि टी किस प्रकार के टी के बावजूद फू लागू कर रहा है? जैसे

bool bIsFoo = typeof(SomeType).IsAssignableFrom(Foo<>)

कुछ ऊपर काम नहीं करता।

उत्तर

4

जेनेरिक इंटरफेस के लिए खोज प्रकार इंटरफेस Foo<> है। फिर उस इंटरफेस के पहले सामान्य तर्क मिलती है:

type.GetInterfaces() 
    .FirstOrDefault(i => i.IsGenericType && i.GetGenericTypeDefinition() == typeof(Foo<>)) 
    ?.GetGenericArguments().First(); 

आप जाँच करना चाहते हैं प्रकार Foo<> लागू कर रहा है या नहीं:

type.GetInterfaces() 
    .Any(i => i.IsGenericType && i.GetGenericTypeDefinition() == typeof(Foo<>)) 
+1

धन्यवाद, कि चाल किया – DemoBytom

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