Sök…


Definiera en klass

Klasser är viktiga aspekter av OOP. En klass är som ett "ritning" av ett objekt. Ett objekt har egenskaperna för en klass, men egenskaperna definieras inte inom klassen. Eftersom varje objekt kan vara olika, definierar de sina egna egenskaper.

Public Class Person
End Class
 
Public Class Customer
End Class

En klass kan också innehålla underklasser . En underklass ärver samma egenskaper och beteenden som sin moderklass, men kan ha sina egna unika egenskaper och klasser.

Arvsmodifierare (på klasser)

ärver

Anger bas (eller överordnad) klass

Public Class Person
End Class

Public Class Customer
    Inherits Person

End Class

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

Möjliga objekt:

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

NotInheritable

Förhindrar programmerare att använda klassen som en basklass.

Public NotInheritable Class Person
End Class

Möjliga objekt:

Dim p As New Person

MustInherit

Anger att klassen endast är avsedd att användas som basklass. (Abstrakt klass)

Public MustInherit Class Person
End Class

Public Class Customer
    Inherits Person
End Class

Möjliga objekt:

Dim c As New Customer

Arvsmodifierare (om egenskaper och metoder)

Overridable

Tillåter att en egenskap eller metod i en klass åsidosätts i en härledd klass.

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

åsido~~POS=TRUNC

Åsidosätter en överbrytbar egenskap eller metod som definieras i basklassen.

Public Class Customer
    Inherits Person

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

NotOverridable

Förhindrar att en egenskap eller metod åsidosätts i en arvklass. Standardbeteende. Kan endast deklareras på åsidosättningsmetoder

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

Exempel på användning:

Dim p As New Person
p.DoSomething()

Dim c As New Customer
c.DoSomething()

Dim d As New DetailedCustomer
d.DoSomething()

Produktion:

Person
Customer
Customer

MustOverride

Kräver att en härledd klass åsidosätter egenskapen eller metoden.

MustOverride-metoder måste deklareras i MustInherit-klasser.

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

Exempel på användning:

Dim c As New Customer
c.DoSomething()

Produktion:

Customer

MyBase

Nyckelordet MyBase fungerar som en objektvariabel som refererar till basklassen för den aktuella instansen av en klass.

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

Exempel på användning:

Dim p As New Person
p.DoSomething()

Console.WriteLine("----")

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

Produktion:

Person
----
Person
Person

Mig vs MyClass

Jag använder den aktuella objektinstansen.

MyClass använder medlemsdefinitionen i klassen där medlemmen kallas

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

Exempel på användning:

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

Produktion:

Customer
Person

överbelastning

Överbelastning är skapandet av mer än en procedur, exempelvis konstruktör eller egenskap i en klass med samma namn men olika argumenttyper.

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

skuggor

Det återinförs en medlem som inte kan överdrivas. Endast samtal till instansen kommer att påverkas. Kod i basklasserna påverkas inte av detta.

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

Exempel på användning:

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

Produktion:

Person
Person
----
Person
Customer

Fallgropar :

Exempel 1, Skapa ett nytt objekt genom ett generiskt. Vilken funktion kommer att användas ??

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

exempel användning:

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

Output: Genom intuition bör resultatet vara detsamma. Men det är inte sant.

Person
Student
----
Person
Person

Exempel 2:

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

Output: Genom intuition kan du tro att p och s är lika och kommer att uppträda lika. Men det är inte sant.

Person
Student

I dessa enkla exempel är det lätt att lära sig Shadows konstiga beteende. Men i verkligheten ger det många överraskningar. Det är lämpligt att förhindra användning av skuggor. Man bör använda andra alternativ så mycket som möjligt (åsidosättningar osv.)

gränssnitt

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
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow