खोज…


एक वर्ग को परिभाषित करना

कक्षाएं OOP के महत्वपूर्ण पहलू हैं। एक वर्ग किसी वस्तु के "खाका" जैसा होता है। एक ऑब्जेक्ट में एक वर्ग के गुण होते हैं, लेकिन विशेषताओं को केवल कक्षा के भीतर परिभाषित नहीं किया जाता है। जैसा कि प्रत्येक वस्तु अलग हो सकती है, वे अपनी विशेषताओं को परिभाषित करते हैं।

Public Class Person
End Class
 
Public Class Customer
End Class

एक वर्ग में उपवर्ग भी हो सकते हैं। एक उपवर्ग अपने मूल वर्ग के समान गुण और व्यवहार विरासत में प्राप्त करता है, लेकिन उसके अपने अद्वितीय गुण और वर्ग हो सकते हैं।

वंशानुक्रम संशोधक (कक्षाओं पर)

विरासत में मिली

आधार (या माता-पिता) वर्ग निर्दिष्ट करता है

Public Class Person
End Class

Public Class Customer
    Inherits Person

End Class

'One line notation
Public Class Student : Inherits Person
End Class

संभव वस्तुएं:

Dim p As New Person
Dim c As New Customer
Dim s As New Student

NotInheritable

प्रोग्रामर को बेस क्लास के रूप में उपयोग करने से रोकता है।

Public NotInheritable Class Person
End Class

संभव वस्तुएं:

Dim p As New Person

MustInherit

निर्दिष्ट करता है कि वर्ग केवल आधार वर्ग के रूप में उपयोग के लिए अभिप्रेत है। (सार वर्ग)

Public MustInherit Class Person
End Class

Public Class Customer
    Inherits Person
End Class

संभव वस्तुएं:

Dim c As New Customer

वंशानुक्रम संशोधक (गुणों और विधियों पर)

overridable

एक वर्ग में एक संपत्ति या विधि को एक व्युत्पन्न वर्ग में ओवरराइड करने की अनुमति देता है।

Public Class Person
    Public Overridable Sub DoSomething()
        Console.WriteLine("Person")
    End Sub
End Class

ओवरराइड

ओवरराइड करने योग्य संपत्ति या विधि को आधार वर्ग में परिभाषित किया गया है।

Public Class Customer
    Inherits Person

    'Base Class must be Overridable
    Public Overrides Sub DoSomething()
        Console.WriteLine("Customer")
    End Sub
End Class

NotOverridable

किसी संपत्ति या विधि को विरासत में मिली श्रेणी में अधिभूत होने से रोकता है। डिफ़ॉल्ट व्यवहार। केवल ओवरराइड विधियों पर घोषित किया जा सकता है

Public Class Person

    Public Overridable Sub DoSomething()
        Console.WriteLine("Person")
    End Sub

End Class

Public Class Customer
    Inherits Person

    Public NotOverridable Overrides Sub DoSomething()
        Console.WriteLine("Customer")
    End Sub

End Class

Public Class DetailedCustomer
    Inherits Customer

    'DoSomething can't be overridden
End Class

उदाहरण उपयोग:

Dim p As New Person
p.DoSomething()

Dim c As New Customer
c.DoSomething()

Dim d As New DetailedCustomer
d.DoSomething()

आउटपुट:

Person
Customer
Customer

MustOverride

आवश्यकता है कि एक व्युत्पन्न वर्ग संपत्ति या विधि को ओवरराइड करता है।

MustOverride विधियाँ MustInherit वर्गों में घोषित की जानी चाहिए

Public MustInherit Class Person

    Public MustOverride Sub DoSomething()
    'No method definition here

End Class

Public Class Customer
    Inherits Person

    'DoSomething must be overridden
    Public Overrides Sub DoSomething()
        Console.WriteLine("Customer")
    End Sub

End Class

उदाहरण उपयोग:

Dim c As New Customer
c.DoSomething()

आउटपुट:

Customer

MyBase

MyBase कीवर्ड एक ऑब्जेक्ट वैरिएबल की तरह व्यवहार करता है जो क्लास के वर्तमान उदाहरण के बेस क्लास को संदर्भित करता है।

Public Class Person
    Public Sub DoSomething()
        Console.WriteLine("Person")
    End Sub
End Class

Public Class Customer
    Inherits Person

    Public Sub DoSomethingElse()
        MyBase.DoSomething()
    End Sub

End Class

उपयोग उदाहरण:

Dim p As New Person
p.DoSomething()

Console.WriteLine("----")

Dim c As New Customer
c.DoSomething()
c.DoSomethingElse()

आउटपुट:

Person
----
Person
Person

मुझे बनाम MyClass

Me वर्तमान वस्तु उदाहरण का उपयोग करता है।

MyClass उस सदस्य में वर्ग का उपयोग करता है जहां सदस्य को बुलाया जाता है

Class Person
    Public Overridable Sub DoSomething()
        Console.WriteLine("Person")
    End Sub

    Public Sub useMe()
        Me.DoSomething()
    End Sub

    Public Sub useMyClass()
        MyClass.DoSomething()
    End Sub
End Class

Class Customer
    Inherits Person

    Public Overrides Sub DoSomething()
        Console.WriteLine("Customer")
    End Sub
End Class

उदाहरण उपयोग:

Dim c As New Customer
c.useMe()
c.useMyClass()

आउटपुट:

Customer
Person

ओवरलोडिंग

ओवरलोडिंग एक से अधिक प्रक्रियाओं का निर्माण, उदाहरण के निर्माता, या एक ही नाम के साथ एक वर्ग में संपत्ति लेकिन विभिन्न तर्क प्रकार हैं।

Class Person
    Overloads Sub Display(ByVal theChar As Char)
        ' Add code that displays Char data.
    End Sub

    Overloads Sub Display(ByVal theInteger As Integer)
        ' Add code that displays Integer data.
    End Sub

    Overloads Sub Display(ByVal theDouble As Double)
        ' Add code that displays Double data.
    End Sub
End Class

छैया छैया

यह एक ऐसे सदस्य को फिर से घोषित करता है, जो अतिदेय नहीं है। केवल उदाहरण के लिए कॉल प्रभावित होंगे। आधार कक्षाओं के अंदर का कोड इससे प्रभावित नहीं होगा।

Public Class Person
    Public Sub DoSomething()
        Console.WriteLine("Person")
    End Sub


    Public Sub UseMe()
        Me.DoSomething()
    End Sub
End Class
Public Class Customer
    Inherits Person
    Public Shadows Sub DoSomething()
        Console.WriteLine("Customer")
    End Sub

End Class

उदाहरण उपयोग:

Dim p As New Person
Dim c As New Customer
p.UseMe()
c.UseMe()
Console.WriteLine("----")
p.DoSomething()
c.DoSomething()

आउटपुट:

Person
Person
----
Person
Customer

नुकसान :

उदाहरण 1, जेनेरिक के माध्यम से एक नई वस्तु बनाना। किस फ़ंक्शन का उपयोग किया जाएगा ??

Public Sub CreateAndDoSomething(Of T As {Person, New})()
    Dim obj As New T
    obj.DoSomething()
End Sub

उदाहरण का उपयोग:

Dim p As New Person
p.DoSomething()
Dim s As New Student
s.DoSomething()
Console.WriteLine("----")
CreateAndDoSomething(Of Person)()
CreateAndDoSomething(Of Student)()

आउटपुट: अंतर्ज्ञान द्वारा परिणाम समान होना चाहिए। फिर भी यह सच नहीं है।

Person
Student
----
Person
Person

उदाहरण 2:

Dim p As Person
Dim s As New Student
p = s
p.DoSomething()
s.DoSomething()

आउटपुट: अंतर्ज्ञान से आप सोच सकते हैं कि पी और एस बराबर हैं और समान व्यवहार करेंगे। फिर भी यह सच नहीं है।

Person
Student

इस सरल उदाहरण में छाया के अजीब व्यवहार को सीखना आसान है। लेकिन वास्तविक जीवन में यह बहुत आश्चर्यचकित करता है। यह उचित रूप से छाया के उपयोग को रोकने के लिए है। जितना संभव हो सके अन्य विकल्पों का उपयोग करना चाहिए (ओवरराइड्स आदि)।

इंटरफेस

Public Interface IPerson
    Sub DoSomething()
End Interface

Public Class Customer
    Implements IPerson
    Public Sub DoSomething() Implements IPerson.DoSomething
        Console.WriteLine("Customer")
    End Sub

End Class


Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow