Ci provo...
L'esempio che mi viene in mente è piuttosto calzante.
Class Triangolo Private base As Integer Private altezza As Integer Sub New(ByVal b As Integer, ByVal a As Integer) base = b altezza = a End Sub Sub calcolaArea() Console.WriteLine(base * altezza / 2) Console.ReadKey() End Sub End ClassEcco: ho costruito una classe Triangolo, che ha come proprietà Private base e altezza, che vengono definite all'atto dell'istanziazione della figura per mezzo del costruttore.
Il metodo calcolaArea restituisce il valore dell'area secondo la formula per il calcolo dell'area di un triangolo.
10Elementare, da un punto di vista matematico.
Tuttavia questo esempiuccio ridicolo offre una serie di sviluppi...
Intanto, istanziamo diversi triangoli di diverse misure.
Sub Main() Dim figura As New Triangolo(5, 4) figura.calcolaArea() Dim figura2 As New Triangolo(6, 7) figura2.calcolaArea() Dim figura3 As New Triangolo(3, 6) figura3.calcolaArea() End Sub
10 21 9e ci sbizzarriamo a volonta...
Ma adesso facciamo qualcosa di più interessante...
Module Module1 Sub Main() Dim figura As New Triangolo(5, 4) Console.WriteLine(figura.Area) Console.ReadKey() End Sub End Module Class Triangolo Private base As Integer Private altezza As Integer Sub New(ByVal b As Integer, ByVal a As Integer) base = b altezza = a End Sub Function Area() As Integer Return base * altezza / 2 End Function End ClassEcco qua. Anzichè un metodo che metta a video il risultato del calcolo dell'area, è più serio creare una function che restituisca il valore dell'area, che può poi essere messa a video o usata in qualsiasi altro modo...
10
Ora creiamo una classe Rettangolo!
Class Rettangolo Inherits Triangolo Sub New(ByVal b As Integer, ByVal a As Integer) MyBase.new(b, a) End Sub Overrides Function Area() As Integer Return base * altezza End Function End ClassDato che i costruttori con parametri non si ereditano, devo scrivere esplicitamente il costruttore e richiamare il corrispondente costruttore della classe base.
Specifico Overrides dietro a Function.
Ma devo fare tutta una serie di modifiche alla classe base.
Class Triangolo Protected base As Integer Protected altezza As Integer Sub New(ByVal b As Integer, ByVal a As Integer) base = b altezza = a End Sub Overridable Function Area() As Integer Return base * altezza / 2 End Function End Class
- dichiarare Protected le proprietà, altrimenti la classe derivata non le vede;
- dichiarare Overridable la function.
Sub Main() Dim mioTriangolo As New Triangolo(5, 4) Console.WriteLine(mioTriangolo.Area) Console.ReadKey() Dim mioRettangolo As New Rettangolo(5, 4) Console.WriteLine(mioRettangolo.Area) Console.ReadKey() End Sub
10 20Perfetto!
Ma adesso sorge un dubbio: Perchè un Rettangolo dovrebbe essere una classe derivata da un Triangolo???
Nessun commento:
Posta un commento