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: 680 | Odgovora: 2 ]

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

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;
}

18.06.2006. u 14:17 

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
Klasa B nije u redu. Trebalo bi da stoji override umesto virtual new.
Ovo pišem napamet, ali mislim da je tako.
18.06.2006. u 14:32 

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
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]
18.06.2006. u 15:55 

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

[ Pregleda: 680 | Odgovora: 2 ]

Postavi temu Odgovori

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