[ nenadnesta @ 31.01.2011. 13:39 ] @
evo primera:
prikazane su klase i izvedene klase

class A
{
public virtual void F() { Console.WriteLine("I am A"); }
}
class B : A
{
public override void F() { Console.WriteLine("I am B"); }
}
class C : B
{
public new virtual void F() { Console.WriteLine("I am C"); }
}
class D : C
{
public override void F() { Console.WriteLine("I am D"); }
}

sada se instanciraju objekti klase A i klase B a1 i b1 pozivanjem podrazumevanih konstruktora A(); i B();

A a1 = new A();
a1.F(); // I am A

B b2 = new B();
b2.F(); // I am B

kako sad da tumacim ovakve izraze:

A b1 = new B();
A c1 = new C();
A d1 = new D();

?????


[ Igor Gajic @ 31.01.2011. 13:49 ] @
Ubacis taj kod u VS i vidi sta ti ispisuje :)

To je sasvim legalan kod
[ Chodaboy33 @ 01.02.2011. 08:55 ] @
Koliko vidim, ti instanciras objekat klase A, i pozivas konstruktor klase B. Tvoj kod: A b1 = new B();
Ako ti to radi, onda je to omogucilo nasledjivanje, jer je klasa B dete od klase A (roditelja). Ako ne radi, znaci da to ne moze tako da se radi. :)

[ Mikelly @ 01.02.2011. 20:46 ] @
Ako sad pozoves F() nad svim tim objektima:
Code:

b1.F();
c1.F();
d1.F();


svaki poziv ce da ti vrati:
Code:

I am B


Pozivajuci funkciju F() nad referencom tipa A, kada A nije samo A, vec i B (C, D), aktivira se polimorfizam.

Tada se trazi najkasnije overridovana definicija funkcije F(); U slucaju b1, to bi bila definicija u klasi B. Medjutim klasa C prekida nasledjivanje zbog kljucne rijeci new, tako da je i za klasu C najkasnije redefinisana fukcija F() ona u klasi B. Isto vazi i za D.

Da je funkcija u klasi C deklarisana ovako:
Code:

public override void F() { Console.WriteLine("I am C"); }


rezultati bi ti bili:
Code:

I am B
I am C
I am D

jer se lanac nasledjivanja nidje ne prekida.

a da je funkcija u klasi C deklarisana ovako (bez virtual):
Code:

public new void F() { Console.WriteLine("I am C"); }


kompajler bi prijavio gresku u klasi D.
[ Boris_ZR @ 05.10.2011. 22:46 ] @
Kolega, jel' to primer sa pismenog iz PJP sa FON-a? :)
Slični zadatak je nama Marko davao na ispitu, voli čovek polimorfizam...