Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

pitanje u vezi virtual/virtual new/override metoda u C# (VS C++)

[es] :: .NET :: .NET Desktop razvoj :: pitanje u vezi virtual/virtual new/override metoda u C# (VS C++)

[ Pregleda: 3984 | Odgovora: 2 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

calculon

Član broj: 63729
Poruke: 18
*.ford.eu.uu.net.



Profil

icon pitanje u vezi virtual/virtual new/override metoda u C# (VS C++)18.06.2006. u 14:17 - pre 217 meseci
Zanima me gde je greska, odnosno zasto sledeci deo koda u C#-u ne radi ono sto ocekujem:
Code:

using System;

public class A {

    public virtual void print() {
        Console.WriteLine("A.print()");
    }
}

public class B : A {

    public virtual new void print() {
        Console.WriteLine("B.print()");
    }
}

public class C : B {

    public override void print() {
        Console.WriteLine("C.print()");
    }
}

public class Test {

    public static void Main() {
        A a = new C();
        a.print();
        B b = new C();
        b.print();
    }
}

Ocekujem da se pri pozivu a.print() & b.print() pozove override-ovani print() metod iz C klase.
Medjutim, a.print() to ne radi.

Zasto gore navedeni kod nema istu funkcionalnost kao sledece u C++-u:
Code:

#include <iostream>

using namespace std;

class A {
    public:
        virtual void print() {
            cout << "A.print()" << endl;
        }
};

class B : A {
    public:
        virtual void print() {
            cout << "B.print()" << endl;
        }
};

class C : B {
    public:
        void print() {
            cout << "C.print()" << endl;
        }
};

int main() {
    A *a = (A*)new C();
    B *b = (B*)new C();
    a->print();
    b->print();

    return 0;
}

 
Odgovor na temu

Wlada

Član broj: 14344
Poruke: 171
195.252.78.*



Profil

icon Re: pitanje u vezi virtual/virtual new/override metoda u C# (VS C++)18.06.2006. u 14:32 - pre 217 meseci
Klasa B nije u redu. Trebalo bi da stoji override umesto virtual new.
Ovo pišem napamet, ali mislim da je tako.
 
Odgovor na temu

calculon

Član broj: 63729
Poruke: 18
*.ford.eu.uu.net.



Profil

icon Re: pitanje u vezi virtual/virtual new/override metoda u C# (VS C++)18.06.2006. u 15:55 - pre 217 meseci
Verovatno sam se pogresno izrazio kada sam rekao "u cemu je greska", odnosno znam da ce override umesto virtual new dovesti do zeljenog ponasanja.

Ono sto me interesuje je zasto override metod (u klasi C) zamenjuje/"nadjacava" samo virtualni metod u direktno nadredjenoj (super) klasi (B), a ne i u super-super klasi (A)? (kao sto radi "print" metod u C++ klasi C)

EDIT:
Ok, igrao sam se malo i dosao do zakljucka da virtual new (u C# klasi B) i virtual (u C++ klasi B) nisu isto (doh :-0 ).

Zahvaljujem se svim citaocima, thread closed :-)


[Ovu poruku je menjao calculon dana 18.06.2006. u 17:12 GMT+1]
 
Odgovor na temu

[es] :: .NET :: .NET Desktop razvoj :: pitanje u vezi virtual/virtual new/override metoda u C# (VS C++)

[ Pregleda: 3984 | Odgovora: 2 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.