2010-03-21 11 views
21

इंटरफेस, के रूप में MSDN द्वारा परिभाषित "तरीकों, प्रतिनिधियों या घटनाओं के केवल हस्ताक्षर होते हैं।" हालांकि, चूंकि गुण प्राप्त करने और सेट विधि के लिए सिंटेक्टिक चीनी से अधिक नहीं हैं, इसलिए उन्हें इंटरफेस में भी अनुमति दी जाती है। मेरा सवाल है - क्या ऐसी कोई परिस्थिति है जहां इंटरफ़ेस में गुणों को परिभाषित करना उचित है या क्या हमें एमएसडीएन द्वारा वर्णित परिदृश्यों के साथ रहना चाहिए?इंटरफ़ेस गुणों को परिभाषित करना चाहिए?

उत्तर

31

मुझे लगता है कि संपत्ति इंटरफ़ेस में पूरी तरह से स्वीकार्य हैं।

जैसा कि आपने कहा था, वे वास्तव में एक प्राप्त, सेट, या प्राप्त और विधि सेट हैं। फ्रेमवर्क में कई इंटरफेस ऐसे IAsyncResult और IWebProxy के रूप में गुण, परिभाषित करते हैं।

+0

धन्यवाद, रीड। इस मामले में, क्या इन गुणों को प्राथमिक (गैर उपयोगकर्ता परिभाषित) प्रकारों का होना चाहिए? कारण मैं पूछता हूं क्योंकि यदि आप उदाहरण के लिए इसे डोमेन प्रकार के रूप में परिभाषित करते हैं, तो आप एक परिपत्र संदर्भ के साथ समाप्त हो सकते हैं। –

+1

@ Otávio Decio: मन में एक अंतरफलक के प्रयोजन रखें। एक इंटरफेस एक अनुबंध परिभाषित करता है। यदि अनुबंध के लिए एक संपत्ति की आवश्यकता है, तो यह ठीक है। आप वृत्तीय संदर्भ के साथ खत्म नहीं करना चाहिए, के बाद से गुण हैं जो सीधे इंटरफ़ेस कार्यान्वित कर रहे हैं प्रकार, बल्कि या तो बुनियादी ढांचा प्रकार, या प्रकार है कि, खुद को, "अनुबंध" का हिस्सा नहीं होना चाहिए। IWebProxy (ऊपर लिंक) एक अच्छा उदाहरण है - इसमें एक प्रमाण पत्र संपत्ति है, जो आईसीडेंशियल्स का है। यह अनुबंध का हिस्सा है, लेकिन अभी भी "उपयोगकर्ता परिभाषित" प्रकार आवश्यक है (उस lib के लिए)। –

+1

बस सुनिश्चित करने के लिए - इंटरफेस में परिभाषित गुण या तो गैर उपयोगकर्ता परिभाषित ठोस प्रकार या इंटरफ़ेस प्रकार (उपयोगकर्ता परिभाषित या नहीं) होना चाहिए। –

13

लेख आप लिंक करने के लिए भी कहा गया है:

एक इंटरफेस एक नाम स्थान के एक सदस्य या एक वर्ग हो सकता है और निम्नलिखित सदस्य हस्ताक्षर हो सकते हैं:

  • तरीके
  • गुण
  • इंडेक्सर्स
  • घटनाक्रम
+0

@Simon: हाँ, मैं अब देखते हैं। –

3

हाँ, एक इंटरफेस जब यह वास्तव में जरूरत होती गुण परिभाषित करना चाहिए। कृपया मान लीजिए। एक आईयूसर इंटरफ़ेस है जिसने एक संपत्ति "नाम" परिभाषित की है, तो आप इस बारे में चिंता किए बिना इसका उपयोग कर सकते हैं कि वस्तु ने संपत्ति को लागू नहीं किया है या नहीं।

public void main() 
{ 
    IUser u = User.GetUser("id"); 
    string name = u.Name; 
} 
संबंधित मुद्दे