इंटरफेस संदर्भ प्रकार क्यों हैं? जहां तक मैं समझता हूं, एक इंटरफेस कक्षाओं (या structs) के बीच एक अनुबंध है, तो यह एक प्रकार क्यों है? मैंने सोचा होगा कि यह न तो एक मूल्य प्रकार या संदर्भ प्रकार है।.Net संदर्भ प्रकारों में इंटरफेस क्यों हैं?
उत्तर
एक struct संकलक संकलन समय क्या ठोस प्रकार है पर पता होना चाहिए, स्टैक पर सही स्थान आरक्षित करने के लिए के रूप में इलाज किया जा करने के लिए। इसका मतलब है कि भी अगर एक struct लागू करता IFoo
, तो साथ:
var ms = new MyStruct();
IFoo foo = ms;
तो foo
असाइनमेंट एक बॉक्सिंग ऑपरेशन है। आप कह सकते हैं "कंपाइलर को यह पता होना चाहिए कि यह केवल एक फू है और 'कंटेनर' ऑपोड का उपयोग करें, लेकिन सामान्य मामले (foo
आदि के लिए एकाधिक असाइनमेंट के साथ) यह संभव नहीं है (मुझे अनुमान लगाना होगा कि यह "रोकथाम समस्या" मारा जाएगा)।
वर्चुअल बनाम स्थैतिक कॉल का एक मुद्दा भी है, लेकिन "बाध्य" ऑपोड इसके आसपास काम करता है।
असल में, इंटरफ़ेस का कोई भी उपयोग हमेशा संदर्भ के रूप में माना जाना चाहिए।
इसमें एक अपवाद है: सामान्य बाधाएं।
आप
static void DoBar<T>(T target) where T : IFoo {
target.Bar();
}
यहाँ विधि के अनुसार मूल्य-प्रकार एक बार JITted है है, तो ढेर अंतरिक्ष T
के लिए आवश्यक में जाना जाता है; Bar
पर कॉल "बाधित" है और आवश्यकतानुसार स्वचालित रूप से आभासी या स्थैतिक हो सकता है।
ठीक है, मुझे यह मिल गया है। तो MyStruct foo लागू करता है, और यह अभी भी एक मान प्रकार है। लेकिन एक बार जब आप MyStruct को foo पर डाल देते हैं, तो यह बॉक्स किया जाता है। foo का व्यवहार इसे एक संदर्भ प्रकार बनाता है। इसके अलावा, foo को एक मान प्रकार असाइन किया जा सकता है, और उसके बाद संदर्भ प्रकार, यह कभी नहीं जानता है, इसलिए इसे सभी परिदृश्यों को कवर करने के लिए संदर्भ प्रकार के रूप में व्यवहार करना होगा ... क्या यह सब सही है? – richard
@ रिचर्ड सभी सही, हाँ। –
वे संदर्भ प्रकार हैं क्योंकि मान प्रकारों का संकलन समय पर एक निश्चित आकार होता है, ताकि उन्हें ढेर पर आवंटित किया जा सके। संदर्भ प्रकार पॉइंटर्स हैं, इसलिए पॉइंटर्स निरंतर आकार के होते हैं लेकिन वे किसी भी आकार की स्मृति को इंगित कर सकते हैं।
- 1. इंटरफेस के संदर्भ में इंटरफेस
- 2. इंटरफेस में स्वयं संदर्भ
- 3. इंटरफेस क्यों नहीं हैं [Serializable]?
- 4. g ++ में संकलन करते समय प्रतीक संदर्भ संदर्भ क्यों हैं?
- 5. सी # == मूल्य प्रकारों और संदर्भ प्रकारों में अलग है?
- 6. पॉइंटर्स संदर्भ प्रकार क्यों हैं?
- 7. सार कक्षाएं और इंटरफेस क्यों बनाते हैं?
- 8. हम इंटरफेस क्यों कार्यान्वित कर रहे हैं?
- 9. जेनेरिक इंटरफेस के लिए संदर्भ संदर्भ
- 10. सी # केवल पढ़ने में गुमनाम प्रकारों के गुण क्यों हैं?
- 11. क्यों .NET अपवाद म्यूटेबल हैं?
- 12. isAssignable संदर्भ और आदिम प्रकारों के साथ
- 13. आईआईएस (नो इंटरफेस) में होस्टिंग .NET सेवा
- 14. .NET मूल्य प्रकार क्यों सील किए गए हैं?
- 15. एक स्थिर संदर्भ में जेनेरिक प्रकारों का उपयोग
- 16. विजुअल स्टूडियो में परिपत्र संदर्भ क्यों खराब अभ्यास हैं?
- 17. इंटरफेस (इंटरफेस/अमूर्त वर्ग) abstractions नहीं हैं?
- 18. WinRT प्रकारों को क्यों सील करना है?
- 19. .NET अपवाद प्रकारों के बीच अंतर
- 20. .NET शब्दकोश में अतिरिक्त क्रम में प्रविष्टियां क्यों हैं?
- 21. हम डेटा प्रकारों की परवाह क्यों करते हैं?
- 22. एक .NET संदर्भ
- 23. इंटरफेस सिर्फ "सिंटेक्टिक शुगर" हैं?
- 24. रिटर्न प्रकारों के लिए कंक्रीट प्रकार या इंटरफेस?
- 25. हम इंटरफेस को दोबारा क्यों लागू करते हैं?
- 26. क्या हम सी # .NET में इंटरफेस में चर और गुण जोड़ सकते हैं?
- 27. क्या सिस्टम.एरेरे मूल्य प्रकारों पर मुक्केबाजी करते हैं या नहीं?
- 28. .Net में, Type.GetCustomAttributes (true) को कॉल करते समय लौटाए गए इंटरफेस पर घोषित गुण क्यों नहीं हैं?
- 29. इंटरफेस बनाम कक्षा में
- 30. सी # में इंटरफेस और प्रतिनिधि क्या हैं?
आप क्यों कहते हैं कि इंटरफेस एक संदर्भ प्रकार है? –
ठीक है, मैं सिर्फ 70-536 के लिए अभ्यास परीक्षा ले रहा था, और यह कहा गया कि इंटरफेस उन चीजों में से एक हैं जो संदर्भ प्रकार (कक्षाओं और प्रतिनिधियों के साथ) हैं। – richard
@nader यह ** ** एक संदर्भ प्रकार है ... –