|
Dit artikel is gepubliceerd op zondag 31 juli 2011 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 2010 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 PropertyEnd ClassClass 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 PropertyEnd ClassClass 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 SubEnd ClassClass 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 SubEnd ClassDownload Visual Basic 2010 Broncode Download Visual C# Sourcecode
Console Application 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 zondag 31 juli 2011 op vbvoorbeelden, bezoek de website voor een recente versie van dit artikel of andere artikels.
|