|
Dit artikel is gepubliceerd op woensdag 28 april 2010 op vbvoorbeelden, bezoek de website voor een recente versie van dit artikel of andere artikels.
Vanaf Visual Basic 9.0 (2008) kunnen velden en writable properties in de object initializer worden geïnitialiseerd aan de hand van een With clausule. Visual Basic Broncode Class Person
Private m_Name As String
Public Property Name() As String
Get
Name = m_Name
End Get
Set(ByVal value As String)
m_Name = value
End Set
End Property
Private m_Address As Address
Public Property Address() As Address
Get
Address = m_Address
End Get
Set(ByVal value As Address)
m_Address = value
End Set
End Property
End Class
Class Address
Private m_Street As String
Public Property Street() As String
Get
Street = m_Street
End Get
Set(ByVal value As String)
m_Street = value
End Set
End Property
Private m_City As String
Public Property City() As String
Get
City = m_City
End Get
Set(ByVal value As String)
m_City = value
End Set
End Property
Private m_ZipCode As String
Public Property ZipCode() As String
Get
ZipCode = m_ZipCode
End Get
Set(ByVal value As String)
m_ZipCode = value
End Set
End Property
End Class
Class Counter
Public Sub New(ByVal value As Integer)
m_Value = value
End Sub
Private m_Value As Integer
Public ReadOnly Property Value() As Integer
Get
Value = m_Value
End Get
End Property
Private m_StepValue As Integer
Public Property StepValue() As Integer
Get
StepValue = m_StepValue
End Get
Set(ByVal value As Integer)
m_StepValue = value
End Set
End Property
Public Sub Raise()
m_Value += StepValue
End Sub
End Class
Class Example
Public Shared Sub Main()
Dim person1 As Person = New Person() With {.Name = "John"}
Console.WriteLine(person1.Name)
Dim person2 As Person = New Person()
With person2
.Name = "Paul"
End With
Dim person3 As Person = New Person() _
With {.Name = "Jane", _
.Address = New Address() _
With {.City = "New York"}}
Console.WriteLine(person3.Name)
Console.WriteLine(person3.Address.City)
Dim counter1 As Counter = New Counter(5) With {.StepValue = 4}
Console.WriteLine(counter1.Value)
counter1.Raise()
Console.WriteLine(counter1.Value)
Console.ReadLine()
End Sub
End ClassDownload Visual Basic Broncode Bekijk deze Broncode in Visual C#
Visual Basic Output John
Jane
New York
5
9 (1) Het gebruik van With in de object initializer is identiek aan het apart instantiëren van het object, om daarna de properties te gaan initialiseren.
Eerst wordt dus steeds de constructor uitgevoerd, dit nog vooraleer de properties ( of velden ) worden geïnitialiseerd.
(2) Meerdere properties kunnen geïnitialiseerd worden. Niet alle properties moeten geïnitialiseerd worden. Object initializers kunnen genest worden.
(3) Ook properties van objecten van een type met een niet default constructor mogen - naast de aanroep naar deze constructor - via With geïnitialiseerd worden.
Enkel publiek beschikbare, writeable, instance properties die niet indexed of qualified zijn, kunnen zo worden geïnitialiseerd. Dit is duidelijk een voordeel van het gebruik van properties ten aanzien van het gebruik van set procedures en get functies.
Ook publiek beschikbare velden ( geen constanten ) kunnen zo worden geïnitialiseerd.
Dit kan ook met de properties en velden van een structure.
Dit artikel is gepubliceerd op woensdag 28 april 2010 op vbvoorbeelden, bezoek de website voor een recente versie van dit artikel of andere artikels.
Visual Basic 2008 & 2010 Boeken
Berichten
|