[ 01011011 @ 29.02.2008. 19:21 ] @
Ovo su mi dakle zadnje 2 metode u klasi, i citam na itnernetu da nema zamjene u C# za mybase()

Kako bih mogao ovo da prebacim u C#

Code:

Public Sub New()

            MyBase.New()

            Try
                'Check to see if the footprint has been initialized
                If Footprint Is Nothing Then
                    Footprint = New Footprint()
                    Footprint.NewEntry = True
                End If
            Catch ex As Exception
                LogError(Err, Me, "Error while initializing object " & ex.Message & " " & ex.Source & Chr(13) & Chr(10) & ex.StackTrace)
            End Try

        End Sub

        Protected Overrides Sub Finalize()

            Try
                If Not Footprint Is Nothing Then Footprint = Nothing
            Catch ex As Exception
                LogError(Err, Me, "Error while finalizing object " & ex.Message & " " & ex.Source & Chr(13) & Chr(10) & ex.StackTrace)
            End Try

            MyBase.Finalize()

        End Sub
[ negyxo @ 29.02.2008. 19:57 ] @
Pa zar nije base u c#-u?
[ 01011011 @ 29.02.2008. 19:59 ] @
Pa jeste... evo ovako sam ja ovo prepisao...mislim da se u c# koristi umjesto ovog overrajda destructor class

Pa bi to izgledalo ovako, nadam se da sam u pravu :) Ima li neko da potvrdi :)

Code:
       public Auction()
        {
            try
            {
                //Check to see if the footprint has been initialized
                if (Footprint == null)
                {
                    Footprint = new Footprint();
                    Footprint.NewEntry = true;
                }
            }
            catch (Exception ex)
            {
                Utils.LogError(ex);
            }
        }

        ~Auction()
        {
            try
            {
                if ((Footprint != null))
                    Footprint = null;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
[ Predrag Glumac @ 29.02.2008. 20:00 ] @
Citat:
i citam na itnernetu da nema zamjene u C# za mybase()

Lazu
Code:
public <ImeTvojeKlase>() : base(){
[ 01011011 @ 29.02.2008. 20:37 ] @
Kako bi onda ovo prepisao gore?
[ Predrag Glumac @ 29.02.2008. 23:48 ] @
Ja tu nis't ne bi dir'o, sto rece Chola Zbog hijerarhije kod nasledjivanja prvo se poziva bazni konstruktor pa onda konstruktor naslednika, a kada se deinicijalizuje klasa (konkretno pri garbage collection-u) poziva se destruktor naslednika pa destruktor roditelja, tako da ne moras nista eksplicitno navoditi kao sto je u izvornom VB kodu. Mada sam ubedjen da i pod VB.Netom isto funkcionise jer se prevede u MSIL, tako da je isto nepotrebno. Ako koristis overloaded konstruktore, onda preko navedenog pseudo-koda mozes da pozivas konstruktore koji nisu definisani u baznoj klasi.
[ mmix @ 01.03.2008. 19:00 ] @
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.
[ 01011011 @ 03.03.2008. 16:41 ] @
hvala na ovako dobrom odgovoru :)