|
Dit artikel is gepubliceerd op zondag 31 juli 2011 op vbvoorbeelden, bezoek de website voor een recente versie van dit artikel of andere artikels.
Ondanks dat we geen objecten kunnen instantiëren van het abstracte type, kan het toch nuttig zijn een constructor op te nemen in deze klassen.
De reden hiervoor is dezelfde zoals bij concrete klassen, namelijk de mogelijkheid in deze constructiecode op te nemen.
De Figure klasse zou bijvoorbeeld een constructor kunnen gebruiken om af te dwingen dat een initiële Color waarde wordt bepaald bij het creëren van een figuur. Visual Basic 2010 Broncode MustInherit Class Figure Private m_Color As String Public Property Color() As String Get Color = m_Color End Get Set( ByVal value As String) m_Color = value End Set End Property Protected Sub New( ByVal color As String) Me.Color = color End SubEnd ClassClass Rectangle : Inherits Figure Private m_Height As Double Public Property Height() As Double Get Height = m_Height End Get Set( ByVal value As Double) m_Height = value End Set End Property Private m_Width As Double Public Property Width() As Double Get Width = m_Width End Get Set( ByVal value As Double) m_Width = value End Set End Property Public Sub New( ByVal color As String, _ ByVal height As Double, ByVal width As Double) MyBase.New(color) Me.Height = height Me.Width = width End SubEnd ClassClass Circle : Inherits Figure Private m_Radius As Double Public Property Radius() As Double Get Radius = m_Radius End Get Set( ByVal value As Double) m_Radius = value End Set End Property Public Sub New( ByVal color As String, _ ByVal radius As Double) MyBase.New(color) Me.Radius = radius End SubEnd ClassClass Example Public Shared Sub Main() Dim rectangle1 As Rectangle = New Rectangle( "red", 10, 20) Dim circle1 As Circle = New Circle( "yellow", 15) End SubEnd ClassDownload Visual Basic 2010 Broncode Download Visual C# Sourcecode
De constructor van een abstracte klasse kan zelfs de Public access modifier krijgen. Doe dit echter niet, dit werkt louter verwarrend omdat Public gebruikt wordt om aan te geven dat de member in de publieke interface van dat type zit en de member dus aanroepbaar is voor clients van dat type. Maar bij een abstracte klasse met een Public constructor blijft het onmogelijk een object van dit type te instantiëren.
Protected is een veel meer voor de hand liggende keuze. Een Protected member kan worden aangeroepen door de afgeleide klassen, dus kan hierbij ook de overgeërfde initialisatiecode van de constructor van die abstracte basis klasse aangeroepen worden ( en herbruikt worden ) in de afgeleide klassen.
Dit artikel is gepubliceerd op zondag 31 juli 2011 op vbvoorbeelden, bezoek de website voor een recente versie van dit artikel of andere artikels.
|