Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 7 odgovora
  • 3.730 pregleda

Najnovija ↓

MyBase.New i Base.new() u C# Kako da odradim 29.02.2008. u 20:21 · pre 227 meseci #1
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
Re: MyBase.New i Base.new() u C# Kako da odradim 29.02.2008. u 20:59 · pre 227 meseci #3
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;
            }
        }
Re: MyBase.New i Base.new() u C# Kako da odradim 01.03.2008. u 00:48 · pre 227 meseci #6
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.
Re: MyBase.New i Base.new() u C# Kako da odradim 01.03.2008. u 20:00 · pre 227 meseci #7
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.
Potpis
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ć
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme