Visual Basic .NET Language
Parole chiave OOP
Ricerca…
Definire una classe
Le lezioni sono aspetti vitali dell'OOP. Una classe è come il "progetto" di un oggetto. Un oggetto ha le proprietà di una classe, ma le caratteristiche non sono definite all'interno della classe stessa. Poiché ogni oggetto può essere diverso, definiscono le loro caratteristiche.
Public Class Person
End Class
Public Class Customer
End Class
Una classe può anche contenere sottoclassi . Una sottoclasse eredita le stesse proprietà e comportamenti della sua classe genitore, ma può avere le sue proprietà e classi uniche.
Modificatori dell'ereditarietà (sulle classi)
eredita
Specifica la classe base (o genitore)
Public Class Person
End Class
Public Class Customer
Inherits Person
End Class
'One line notation
Public Class Student : Inherits Person
End Class
Oggetti possibili:
Dim p As New Person
Dim c As New Customer
Dim s As New Student
NotInheritable
Impedisce ai programmatori di utilizzare la classe come classe base.
Public NotInheritable Class Person
End Class
Oggetti possibili:
Dim p As New Person
MustInherit
Specifica che la classe è concepita per essere utilizzata solo come classe base. (Classe astratta)
Public MustInherit Class Person
End Class
Public Class Customer
Inherits Person
End Class
Oggetti possibili:
Dim c As New Customer
Modificatori di ereditarietà (su proprietà e metodi)
Overridable
Permette di sovrascrivere una proprietà o un metodo in una classe in una classe derivata.
Public Class Person
Public Overridable Sub DoSomething()
Console.WriteLine("Person")
End Sub
End Class
Sostituzioni
Sovrascrive una proprietà o un metodo Overridable definito nella classe base.
Public Class Customer
Inherits Person
'Base Class must be Overridable
Public Overrides Sub DoSomething()
Console.WriteLine("Customer")
End Sub
End Class
NotOverridable
Impedisce che una proprietà o un metodo vengano sovrascritti in una classe ereditaria. Comportamento predefinito Può essere dichiarato solo sui metodi di sostituzione
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
Esempio di utilizzo:
Dim p As New Person
p.DoSomething()
Dim c As New Customer
c.DoSomething()
Dim d As New DetailedCustomer
d.DoSomething()
Produzione:
Person
Customer
Customer
MustOverride
Richiede che una classe derivata sostituisca la proprietà o il metodo.
I metodi MustOverride devono essere dichiarati nelle classi 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
Esempio di utilizzo:
Dim c As New Customer
c.DoSomething()
Produzione:
Customer
MyBase
La parola chiave MyBase si comporta come una variabile oggetto che fa riferimento alla classe base dell'istanza corrente di una classe.
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
Esempio di utilizzo:
Dim p As New Person
p.DoSomething()
Console.WriteLine("----")
Dim c As New Customer
c.DoSomething()
c.DoSomethingElse()
Produzione:
Person
----
Person
Person
Me vs MyClass
Io usa l'istanza dell'oggetto corrente.
MyClass utilizza memberdefinition nella classe in cui viene chiamato il membro
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
Esempio di utilizzo:
Dim c As New Customer
c.useMe()
c.useMyClass()
Produzione:
Customer
Person
Sovraccarico
Il sovraccarico è la creazione di più di una procedura, costruttore di istanze o proprietà in una classe con lo stesso nome ma tipi di argomenti diversi.
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
Shadows
Ricalcola un membro che non è sovrascrivibile. Saranno interessate solo le chiamate all'istanza. Il codice all'interno delle classi base non sarà influenzato da questo.
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
Esempio di utilizzo:
Dim p As New Person
Dim c As New Customer
p.UseMe()
c.UseMe()
Console.WriteLine("----")
p.DoSomething()
c.DoSomething()
Produzione:
Person
Person
----
Person
Customer
Insidie :
Esempio 1, Creazione di un nuovo oggetto tramite un generico. Quale funzione verrà utilizzata ??
Public Sub CreateAndDoSomething(Of T As {Person, New})()
Dim obj As New T
obj.DoSomething()
End Sub
esempio di utilizzo:
Dim p As New Person
p.DoSomething()
Dim s As New Student
s.DoSomething()
Console.WriteLine("----")
CreateAndDoSomething(Of Person)()
CreateAndDoSomething(Of Student)()
Uscita: per intuizione il risultato dovrebbe essere lo stesso. Eppure non è vero.
Person
Student
----
Person
Person
Esempio 2:
Dim p As Person
Dim s As New Student
p = s
p.DoSomething()
s.DoSomething()
Output: per intuizione si potrebbe pensare che p e s siano uguali e si comportino in modo uguale. Eppure non è vero.
Person
Student
In questi semplici esempi è facile imparare lo strano comportamento di Shadows. Ma nella vita reale porta molte sorprese. È consigliabile evitare l'uso di ombre. Uno dovrebbe usare altre alternative il più possibile (overrides ecc.)
interfacce
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