Samo uz napomenu da se po hijerarhiji poziva defaul bazni konstruktor (bez parametara), ako VB kod sadzi poziv MyBase.New sa parametrima, onda mora da se iskoristi base(parametri) forma inace ce biti pozvan bazni konstruktor cak iako se potpisi konstruktora identicni:
Code:
class Class00
{
public Class00() { }
public Class00(int i) { }
}
class Class01 : Class00
{
public Class01() { }
public Class01(int i): base(i) { } // ovo poziva Class00(int)
// public Class01(int c) { } // ovo bi pozvalo Class00()
}
I u pravu si za vb.net, poziv MyBase.New() je suvisan. Header konstruktora ce vec obaviti poziv default konstruktora, koriscenje MyBase.New() je identicno koriscenju base()
Medjutim, prica je potpuno drugacija sa Finalize (C# destruktorima). u C#-u ce kompajler obezbediti pozivanje parent edstruktora, u VB.NET nece. Tj C# destruktor proizvodi sledeci kod (prebacen u VB.NET da ne listam IL):
Code:
C#
class Class01 : Class00
{
~Class01() { <neki kod>}
}
VB.NET:
Protected Overrides Sub Finalize()
Try
<neki kod>
Finally
MyBase.Finalize
End Try
End Sub
medjutim, VB Finalizer iz Class01 je prazan:
Code:
.method family virtual instance void Finalize() cil managed
{
.maxstack 8
L_0000: nop
L_0001: nop
L_0002: ret
}
Dakle ako se C# kod portuje u VB.NET mora se ekspicitno napraviti Try/Finaly konstrukcija koja poziva nasledjeni Finalizer.
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog
naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji
je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan,
sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv - Z.Đinđić