In C#3.0 grazie agli object initializers è possibile creare un istanza e inizializzarla in questo modo:

C#3.0

  
   1:  class Person{
   2:        public int Age;
   3:        public string Name;
   4:        public readonly Address Address=new Address();
   5:  }
   6:   
   7:  Person p1 = new Person { Name = "Corrado", Age = 99 Address = { Cap = 24100, City = "Bergamo" } };  


Peccato che la stessa cosa non sia possibile in VB9, nello specifico VB9 non supporta l'inizilizzazione di proprietà/fields read-only, quindi in VB9 l'inizializzazione è possibile solo se la classe è definita in questo modo:

VB9

   1:  Public Class Person
   2:    Public Name As String
   3:    Public Age As Integer
   4:    Public Address As Address
   5:  End Class
   6:   
   7:  Dim p2 As New Person With {.Name = "Corrado", .Age = 33, .Address = New Address With {.Cap = 24100, .City = "Bergamo"}} 


In compenso VB9 permette di definire Anonymous Types che non sono read-only (come C#3.0), la definizione delle proprietà read-only avviene attraverso una keyword Key.

C#3.0

   1:  var p3 = new { Name = "Luigi", Age = 35 };
   2:  p3.Age = 12; //Non compila

VB9

   1:  Dim p3 = New With {Key .Name = "Luigi", .Age = 35}
   2:  p3.Name = "Pino"  'Non funziona
   3:  p3.Age = 33 ' Ok

Personalmente avrei preferito avere lo stesso set di features...smile_sad