निम्नलिखित वर्गों पर विचार के साथ सार विधि:प्रबलता से टाइप किये वापसी प्रकार
public abstract class Animal
{
public abstract Animal GiveBirth();
}
public class Monkey : Animal
{
public override Animal GiveBirth()
{
return new Monkey();
}
}
public class Snake : Animal
{
public override Animal GiveBirth()
{
return new Snake();
}
}
//That one doesnt makes sense.
public class WeirdHuman: Animal
{
public override Animal GiveBirth()
{
return new Monkey();
}
}
मैं overrided GiveBirth
विधि की वापसी प्रकार लागू करने के लिए एक तरह से खोज कर रहा हूँ इतना है कि यह हमेशा वास्तविक वर्ग प्रकार देता है, तो यह है कि WeirdHuman
Monkey
को जन्म दे सकता है।
मुझे लगता है कि उत्तर सामान्य प्रकारों के बारे में है, लेकिन मैं नहीं देख सकता कि मैं यह कैसे कर सकता हूं।
अपेक्षित परिणाम के उदाहरण:
public abstract class Animal
{
public abstract /*here a way to specify concrete type*/ GiveBirth();
}
public class Monkey : Animal
{
public override Monkey GiveBirth() //Must returns an actual Monkey
{
return new Monkey();
}
}
"बिल्कुल असंभव" एक जवाब, हो सकता है अगर स्पष्ट रूप से समझाया।
: इन विधियों सामान्य पशु प्रकार प्रतिबंधित एक ही हो सकता है। मुझे यह निर्दिष्ट करने का कोई तरीका नहीं दिख रहा है कि सामान्य प्रकार को वास्तविक वर्ग प्रकार को लागू करना होगा। जैसे 'टी: यह' या कुछ ... – Johnny5
इसका समर्थन करने वाली भाषाएं क्या हैं? – Johnny5
जावा इसका समर्थन करता है। कुछ भी नहीं। नेट इसका समर्थन करता है क्योंकि सीएलआर अंतर्निहित समस्या है। उम्मीद है कि भविष्य का संस्करण समर्थन जोड़ देगा, लेकिन जैसा कि मैं इसे समझता हूं, यह इसे काम करने में काफी बदलाव करेगा। –