Visual Basic .NET Language
OOP-nyckelord
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