Novo

Forum kao aplikacija na telefonu

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

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

  • 2 odgovora
  • 4.977 pregleda

Najnovija ↓

pitanje u vezi virtual/virtual new/override metoda u C# (VS C++) 18.06.2006. u 15:17 · pre 248 meseci #1
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;
}

Re: pitanje u vezi virtual/virtual new/override metoda u C# (VS C++) 18.06.2006. u 16:55 · pre 248 meseci
izmenjeno 1 put, poslednji put calculon 18.06.2006. u 17:12
  1. calculon18.06.2006. u 17:12zapis iz teksta poruke
#3
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 :-)
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme