2013-10-04 8 views
7

मैं एक सामान्य वर्ग से एक व्युत्पन्न वर्ग बनाने के लिए कोशिश कर रहा हूँ, और मैं सोच रहा था क्या मतभेद"कक्षा ए: बी <C>" और "कक्षा ए <T>" के बीच क्या अंतर है: बी <T> जहां टी: सी "?

public class A<T> : B<T> where T : C 
{ 
} 

और

public class A: B<C> 
{ 
} 

वर्ग एक के अंदर के बीच हैं वहाँ शायद कोई कोड हो जाएगा, के बाद से (अभी के लिए) यह कक्षा बी से अलग व्यवहार नहीं करेगा। मैं केवल दो वर्गों में अंतर करना चाहता हूं।

अग्रिम धन्यवाद। सामान्य T एक C प्रकार या इसके बारे में एक बच्चे (एक अमूर्त है क्या) होना चाहिए

public class A<T> : B<T> where T : C 
{ 
} 

में:

उत्तर

8

कहो आप अपने पहले में तो एक वर्ग

public class D : C 
{ 
} 

था उदाहरण नीचे मान्य है।

var a = new A<D> 

आप T के लिए किसी भी वर्ग का उपयोग कर सकते है कि अंततः सी

से ली गई है

जबकि अपने दूसरे कोड कठिन genric प्रकार पैरामीटर के लिए बी उपयोग सी राशि के लिए कोडित और सामान्य नहीं है।

0

दूसरा विकल्प में आप एक गैर सामान्य वर्ग A साथ खत्म हो जाएगा, जबकि पहले विकल्प में आप सामान्य वर्ग होगा A

2

आपके पहले उदाहरण में, AC प्रकार का एक सामान्य वर्ग है। यह C प्रकार B से भी विरासत में मिलता है।

आपका दूसरे उदाहरण निम्नलिखित गुण है:

Aनहीं एक सामान्य वर्ग है। यह C प्रकार B से विरासत में मिलता है।

तो, वे वास्तव में काफी अलग हैं।

1

पहले उदाहरण में आप एक सामान्य वर्ग रूप A Classकर रहे हैं कि कि T जब वर्ग instantiating दिया जाना चाहिए।

A<C> instance = new A<C>(); 

दूसरे उदाहरण में, A Classएक सामान्य वर्ग, जब A Class instantiating के बाद से TA Class घोषणा के आधार पर पर्दे के पीछे स्वतः अपनी किया के बाद से घोषित करने के लिए कोई जरूरत नहीं है नहीं है।

A instance = new A(); 

एक और अंतर यह

दी श्रेणीबद्ध विरासत पेड़ है, तो:

enter image description here

पहला उदाहरण में, जब आप A वर्ग का दृष्टांत, में से हर एक विरासत में मिला वर्ग T के रूप में उपयोग किया जा सकता है।

दूसरे उदाहरण में, आप A वर्ग इन्स्तांत और C2 वर्ग निर्दिष्ट कर सकते हैं, इसलिए केवल कक्षाओं कि C2 से विरासत A वर्ग insde इस्तेमाल किया जा सकता।

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