vb.net सबस बाल उदाहरण से आधार वर्ग विधि को ओवरराइड किया गया था




सबसे छोटी पूर्ण वर्ग संख्या (4)

निम्नलिखित कोड पर विचार करें:

Public Class Animal

Public Overridable Function Speak() As String
    Return "Hello"
End Function

End Class

Public Class Dog
    Inherits Animal

    Public Overrides Function Speak() As String
        Return "Ruff"
    End Function

End Class

Dim dog As New Dog
Dim animal As Animal
animal = CType(dog, Animal)
// Want "Hello", getting "Ruff"
animal.Speak()

मैं कुत्ते को पशु के उदाहरण के रूप में परिवर्तित / सीटीआईपी कैसे बदल सकता हूं और पशु है?


आप नहीं; उप-वर्ग की विधि विरासत की परिभाषा के अनुसार, सुपर वर्ग की विधि को ओवरराइड करती है

अगर आप ओवरराइड पद्धति उपलब्ध होने चाहें, तो उसे उपवर्ग में उजागर करें, उदा

Public Class Dog 
    Inherits Animal
    Public Overrides Function Speak() As String
        Return "Ruff"
    End Function
    Public Function SpeakAsAnimal() As String
        Return MyBase.Speak()
    End Function
End Class

मुझे नहीं लगता कि आप कर सकते हैं

बात यह है कि वस्तु अभी भी एक कुत्ते है। आप जिस व्यवहार का वर्णन कर रहे हैं ("नमस्ते" के बजाए जाति वस्तु से "रफ़" प्राप्त करना) मानक है क्योंकि आप विभिन्न प्रकार के जानवरों का एक गुच्छा जाने के लिए पशु वर्ग का उपयोग करने में सक्षम होना चाहते हैं।

उदाहरण के लिए, यदि आपके पास तीसरी कक्षा थी:

Public Class Cat
    Inherits Animal

    Public Overrides Function Speak() As String
        Return "Meow"
    End Function
End Class

तब आप उनसे इस प्रकार पहुंच सकते हैं:

protected sub Something
    Dim oCat as New Cat
    Dim oDog as New Dog

    MakeSpeak(oCat)
    MakeSpeak(oDog)
End sub

protected sub MakeSpeak(ani as animal)
    Console.WriteLine(ani.Speak())
end sub 

आप मूलतः विरासत श्रृंखला तोड़ने के बारे में क्या बात कर रहे हैं अब, यह किया जा सकता है, एक पैरामीटर स्वीकार करने के लिए स्पीक फ़ंक्शन की स्थापना करके, जो इसे मूल मान के लिए वापस करने के लिए कहती है या नहीं, या बेस वैल्यू के लिए एक अलग SPEAK फ़ंक्शन को वापस करने के लिए कहती है, लेकिन बॉक्स के बाहर, आप प्राप्त नहीं कर सकते चीजें जो इस तरह से व्यवहार करती हैं


मुझे पता है कि यह कुछ महीने पहले पोस्ट किया गया है, लेकिन मैं अभी भी कोशिश करने और जवाब देने जा रहा हूं, शायद सिर्फ पूर्णता के लिए।

आपको बताया गया है कि आप dog वर्ग के भीतर से ओवरराइडेन विधि का उपयोग कर सकते हैं, और तब आप इसे एक अलग नाम के साथ उजागर कर सकते हैं। लेकिन सशर्त का उपयोग करने के बारे में क्या?

आप बस कर सकते हैं:

Public Class Animal

Public Overridable Function Speak(Optional ByVal speakNormal as Boolean = False) As String
    Return "Hello"
End Function

End Class

Public Class Dog
    Inherits Animal

    Public Overrides Function Speak(Optional ByVal speakNormal as Boolean = False) As String
        If speakNormal then
            return MyBase.Speak()
        Else
            Return "Ruff"
        End If
    End Function

End Class

और फिर उन्हें पसंद करें:

Dim dog As New Dog
Dim animal As new Animal
animal.Speak() //"Hello"
dog.Speak()//"Ruff"
dog.Speak(true)//"Hello"

वैकल्पिक रूप से, आप प्राप्त कर सकते getTheAnimalInTheDog और इसे Speak() :

आप बस कर सकते हैं:

Public Class Animal

Public Overridable Function Speak() As String
    Return "Hello"
End Function

Public MustOverride Function GetTheAnimalInMe() As Animal

End Class

Public Class Dog
    Inherits Animal

    Public Overrides Function Speak() As String
        Return "Ruff"
    End Function

    Public Overrides Function GetTheAnimalInMe() As Animal
        Dim a As New Animal
        //Load a with the necessary custom parameters (if any)
        Return a
    End Function
End Class

और फिर:

Dim dog As New Dog
Dim animal As new Animal
animal.Speak() //"Hello"
dog.Speak()//"Ruff"
dog.GetTheAnimalInMe().Speak()//"Hello"

आशा करता हूँ की ये काम करेगा ;)


मुझे लगता है कि यदि आप "ओवर्रिडिव" को छोड़ देते हैं और "ओवरराइड" को "नया" में बदलते हैं तो आप जो चाहें प्राप्त करेंगे।

Public Class Animal

Public Function Speak() As String
    Return "Hello"
End Function

End Class

Public Class Dog
    Inherits Animal

    Public New Function Speak() As String
        Return "Ruff"
    End Function

End Class

Dim dog As New Dog
Dim animal As Animal
dog.Speak() ' should be "Ruff"
animal = CType(dog, Animal)
animal.Speak() ' should be "Hello"




inheritance