चूंकि मल्टीपल इनहेरिटेंस खराब है (यह स्रोत को अधिक जटिल बनाता है) सी # सीधे ऐसा पैटर्न प्रदान नहीं करता है। लेकिन कभी-कभी यह क्षमता रखने में मददगार होगा।
उदाहरण के लिए, मैं इंटरफेस और तीन वर्गों का उपयोग करते हुए लापता कई विरासत पैटर्न को लागू करने में सक्षम हूं:
public interface IFirst { void FirstMethod(); }
public interface ISecond { void SecondMethod(); }
public class First:IFirst
{
public void FirstMethod() { Console.WriteLine("First"); }
}
public class Second:ISecond
{
public void SecondMethod() { Console.WriteLine("Second"); }
}
public class FirstAndSecond: IFirst, ISecond
{
First first = new First();
Second second = new Second();
public void FirstMethod() { first.FirstMethod(); }
public void SecondMethod() { second.SecondMethod(); }
}
हर बार जब मैं क्लास फ़र्स्टएंडसेकंड को भी बदलने की ज़रूरत होती है, तो एक इंटरफेस में से एक को जोड़ देता हूं ।
क्या कई मौजूदा वर्गों को एक नई कक्षा में इंजेक्ट करने का एक तरीका है जैसे कि C ++ में संभव है?
हो सकता है कि किसी प्रकार की कोड पीढ़ी का उपयोग करके कोई समाधान हो?
या यह इस तरह दिख सकता है (काल्पनिक सी # वाक्य रचना):
public class FirstAndSecond: IFirst from First, ISecond from Second
{ }
जब मैं इंटरफ़ेस में से एक को संशोधित करता हूं तो क्लास फर्स्टएंडसेकंड को अपडेट करने की आवश्यकता नहीं होगी।
संपादित करें
शायद एक व्यावहारिक उदाहरण पर विचार करना बेहतर होगा:
आपके पास एक मौजूदा वर्ग है (उदाहरण के लिए ITextTcpClient पर आधारित एक पाठ आधारित टीसीपी क्लाइंट) जो आप पहले से ही अपनी परियोजना के अंदर विभिन्न स्थानों पर उपयोग करते हैं। अब आप विंडोज़ फॉर्म डेवलपर्स के लिए आसान पहुँच के लिए अपनी कक्षा का एक घटक बनाने की आवश्यकता महसूस करते हैं।
जहाँ तक मैं जानता हूँ कि वर्तमान में आपके पास ऐसा करने के दो तरीके हैं:
एक नया वर्ग लिखें जो कि घटकों से विरासत में मिला है और TextTcpClient वर्ग के इंटरफ़ेस को लागू करता है जो कि कक्षा के उदाहरण के साथ फर्स्टएंडसेकंड के साथ दिखाया गया है।
एक नया वर्ग लिखें जो TextTcpClient से विरासत में मिले और किसी तरह IComponent को लागू करता है (वास्तव में अभी तक यह कोशिश नहीं की गई है)।
दोनों ही मामलों में आपको प्रति विधि के अनुसार काम करने की आवश्यकता है न कि प्रति कक्षा। चूंकि आप जानते हैं कि हमें TextTcpClient और घटक के सभी तरीकों की आवश्यकता होगी, इसलिए यह उन दो को एक कक्षा में संयोजित करने का सबसे आसान समाधान होगा।
संघर्ष से बचने के लिए यह कोड पीढ़ी द्वारा किया जा सकता है जहां परिणाम बाद में बदला जा सकता है लेकिन हाथ से टाइप करना गधे में एक शुद्ध दर्द है।