2011-01-09 13 views
11

इंटरफेस संदर्भ प्रकार क्यों हैं? जहां तक ​​मैं समझता हूं, एक इंटरफेस कक्षाओं (या structs) के बीच एक अनुबंध है, तो यह एक प्रकार क्यों है? मैंने सोचा होगा कि यह न तो एक मूल्य प्रकार या संदर्भ प्रकार है।.Net संदर्भ प्रकारों में इंटरफेस क्यों हैं?

+0

आप क्यों कहते हैं कि इंटरफेस एक संदर्भ प्रकार है? –

+0

ठीक है, मैं सिर्फ 70-536 के लिए अभ्यास परीक्षा ले रहा था, और यह कहा गया कि इंटरफेस उन चीजों में से एक हैं जो संदर्भ प्रकार (कक्षाओं और प्रतिनिधियों के साथ) हैं। – richard

+3

@nader यह ** ** एक संदर्भ प्रकार है ... –

उत्तर

10

एक 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 पर कॉल "बाधित" है और आवश्यकतानुसार स्वचालित रूप से आभासी या स्थैतिक हो सकता है।

+0

ठीक है, मुझे यह मिल गया है। तो MyStruct foo लागू करता है, और यह अभी भी एक मान प्रकार है। लेकिन एक बार जब आप MyStruct को foo पर डाल देते हैं, तो यह बॉक्स किया जाता है। foo का व्यवहार इसे एक संदर्भ प्रकार बनाता है। इसके अलावा, foo को एक मान प्रकार असाइन किया जा सकता है, और उसके बाद संदर्भ प्रकार, यह कभी नहीं जानता है, इसलिए इसे सभी परिदृश्यों को कवर करने के लिए संदर्भ प्रकार के रूप में व्यवहार करना होगा ... क्या यह सब सही है? – richard

+1

@ रिचर्ड सभी सही, हाँ। –

3

वे संदर्भ प्रकार हैं क्योंकि मान प्रकारों का संकलन समय पर एक निश्चित आकार होता है, ताकि उन्हें ढेर पर आवंटित किया जा सके। संदर्भ प्रकार पॉइंटर्स हैं, इसलिए पॉइंटर्स निरंतर आकार के होते हैं लेकिन वे किसी भी आकार की स्मृति को इंगित कर सकते हैं।

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