ठीक है, कि शीर्षक एक छोटे से स्पष्ट नहीं है, लेकिन मुझे लगता है, यह डाल तक समझाते अन्य के लिए एक बेहतर तरीका नहीं सोच सकते हैं ...क्या विरासत स्थाई विधि में कक्षा संदर्भ का पता लगाना संभव है?
मैं एक वर्ग Animal
, एक स्थिर, सामान्य विधि के साथ है कहते हैं:
public static T Create<T>() where T : Animal {
// stuff to create, initialize and return an animal of type T
}
और मैं उपवर्गों Dog
, Cat
है, Hamster
आदि के लिए एक Dog
पाने के लिए, मैं लिख सकते हैं:
Dog d = Animal.Create<Dog>();
ओ आर
Dog d = Dog.Create<Dog>();
जो वास्तव में वही बात है। लेकिन ऐसा लगता है कि Dog
लिखना बहुत मूर्खतापूर्ण है, क्योंकि मैं पहले से ही Dog
सबक्लास के माध्यम से स्थैतिक विधि का आह्वान कर रहा हूं।
आप आधार वर्ग में एक Create()
विधि लेखन के किसी भी चालाक रास्ता के बारे में सोच सकते हैं, ताकि मैं उपवर्गों में से प्रत्येक में एक Create()
विधि लिखे बिना
Dog d = Dog.Create();
Cat c = Cat.Create();
Hamster h = Hamster.Create();
आह्वान सकता है?
आप शायद 'टी' जानवरों को प्रतिबंधित करना चाहते हैं: 'कक्षा पशु जहां टी: पशु ' –
dtb
@ डीटीबी: ज़रूर! प्रतिक्रिया अद्यतन, धन्यवाद। –
बनाएँ() के अंदर कोड वर्चुअल/अमूर्त तरीकों को कॉल करेगा, इस प्रकार यह व्युत्पन्न प्रकारों के उदाहरण बनाएगा। –