बल्कि देर से इस सवाल का मिला लेकिन मैं। में झंकार के लिए
सी # में इंटरफेस चाहता था एक है-एक रिश्ता है, लेकिन नहीं है-एक-वस्तु। इसके बजाय, एक कार्यान्वयन है।
दूसरे शब्दों में, वर्ग फू कि Ibar, निम्न परीक्षण को लागू करता है के लिए:
Foo myFoo = new Foo();
return myFoo is IBar;
सचमुच सच देता है। आप यह भी कह सकते हैं,
IBar bar = myArrayList[3] as IBar;
Foo foo = bar as Foo;
या, यदि किसी विधि को आईबार की आवश्यकता है, तो आप एक फू पास कर सकते हैं।
void DoSomething(IBar bar) {
}
static void Main() {
Foo myFoo = new Foo();
DoSomething(myFoo);
}
जाहिर है, एक आईबार के पास कोई कार्यान्वयन नहीं है, इसलिए कर-संबंध संबंध भी लागू होता है।
interface IBar { void happy(); }
class Foo : IBar
{
void happy()
{
Console.Write("OH MAN I AM SO HAPPY!");
}
}
class Program
{
static void Main()
{
IBar myBar = new Foo();
myBar.happy();
}
}
लेकिन, उस मामले के लिए, यह वस्तु विरासत के बारे में भी सच है; वर्ग फू को प्राप्त करने वाले क्लास फू का एक ऑब्जेक्ट एक कैन-रिश्ते के साथ-साथ एक रिश्ते है, जैसे इंटरफ़ेस करता है। यह सिर्फ इतना है कि इसका कार्यान्वयन इसके लिए पूर्व-निर्मित था।
असली सवाल है-एक करने के लिए क्या, कर सकते हैं-do- क्या? एक विरासत वर्ग वस्तु है-एक करने के लिए [मूल उदाहरण] और कर सकते हैं-do- [माता पिता के व्यवहार], जबकि एक अंतरफलक के एक कार्यान्वयन है-एक- [इंटरफेस कार्यान्वयन] और इसलिए-do- कर सकते हैं [ इंटरफ़ेस व्यवहार]।
ज्यादातर मामलों में जहां प्रोग्रामेटिक है- ऊपर सूचीबद्ध लोगों जैसे रिश्तों का उपयोग किया जाता है, केवल इंटरफ़ेस का मूल्यांकन किया जाता है, इसलिए विरासत वर्ग और एक कार्यान्वित इंटरफ़ेस दोनों समान होते हैं-एक और कर सकते हैं गुण।
अपनी पुस्तक जॉन पढ़ना
HTH, जॉन
। यह बहुत अच्छा है। –
@Iain: खुशी है कि आप इसका आनंद ले रहे हैं। जब आप समाप्त कर लें तो मुझे प्रतिक्रिया भेजें :) –
क्या होगा यदि आपके पास केवल सार तत्वों के साथ सार तत्व था? यह एक इंटरफ़ेस से अलग कैसे होगा? मेरा मानना है कि अगर इसमें केवल विधि हो तो कोई फर्क नहीं पड़ता। तो माइक्रोसॉफ्ट ने दो चीजें क्यों लाई हैं। विरासत है - एक रिलीज, इंटरफ़ेस कार्यान्वयन क्या है? –