2013-01-21 23 views
6

इन दोनों तरीकों में क्या अंतर है के इंटरफेस संस्करण बनाम?जेनेरिक संस्करण एक विधि

पहले:

public static int Foo<T>(T first, T second) where T:IComparable 
{ 
    return first.CompareTo(second) 
} 

दूसरा:

public static int Foo(IComparable first, IComparable second) 
{ 
    return first.CompareTo(second); 
} 
+1

यह उस पोस्ट का सटीक डुप्लिकेट नहीं है, क्योंकि यहां हमारे पास दो पैरामीटर हैं और यह कुछ मानदंडों को बदलता है। अंतर देखने के पहले जवाब को देखें –

उत्तर

13

पहली विधि के लिए, दो मापदंडों के प्रकार के एक ही हो सकता है,, int और int है जैसे। प्रकार IComparable इंटरफ़ेस को लागू करने की है।

दूसरी विधि के लिए, दो पैरामीटर विभिन्न प्रकार हो सकता है। दोनों प्रकार के IComparable इंटरफ़ेस को लागू करना चाहिए, लेकिन एक ही है, जैसे, int और string होने की जरूरत नहीं है।

नोट यदि प्रकार ही नहीं हैं कि IComparable.CompareTo method संभावना एक अपवाद फेंक देते हैं। इसलिए यह सुनिश्चित करें कि प्रकार वास्तव में एक ही कर रहे हैं बनाने के लिए बेहतर है। आप अपने पहले विधि, या यहाँ तक कि सामान्य IComparable<T> interface का उपयोग करके बेहतर उपयोग करके ऐसा कर सकते हैं।


अनुवर्ती प्रश्न निश्चित रूप से, यह है: इन दो तरीकों के बीच क्या अंतर है?

पहले:

public static int Foo<T1, T2>(T1 first, T2 second) where T1 : IComparable<T2> 
{ 
    return first.CompareTo(second); 
} 

दूसरा:

public static int Foo<T>(IComparable<T> first, T second) 
{ 
    return first.CompareTo(second) 
} 

उत्तर: पहली विधि पहला तर्क बॉक्स नहीं है, जबकि दूसरी विधि है।

1

अंतर कह सकते हैं कि प्रदान की कोड टुकड़ा से, कि

जेनेरिक्स संस्करण:

    जेनरिक के लिए
  • नए कोड हर प्रकार

Foo<Class1> परिभाषित, Foo<Class2> के लिए उत्पन्न हो जाएगा, Foo<Class3>

  • आप एक प्रकार पर संकलन समय

इंटरफ़ेस संस्करण निर्धारित करने होंगे:

OOP अवधारणाओं से
  • लाभ, वास्तविक कोड से कार्यान्वयन जानकारी को छिपाए।

  • क्रम प्रकार definiton (और अधिक लचीलापन), लेकिन कम "सामान्य" उस शब्द का शुद्ध भावना के मामले में।

सामान्य में: इंटरफ़ेस संस्करण अधिक लचीला लेकिन कम सामान्य है (सब कुछ, वैसे, स्वाभाविक रूप से ठोस कोड implementaiton पर निर्भर करता है)।

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