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

C# Konstruktori i virtuelne metode

[es] :: .NET :: C# Konstruktori i virtuelne metode

[ Pregleda: 3670 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

nenadnesta
Nenad Stojkovic
student

Član broj: 263759
Poruke: 23
*.mts.telekom.rs.



Profil

icon C# Konstruktori i virtuelne metode31.01.2011. u 13:39 - pre 160 meseci
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();

?????


 
Odgovor na temu

Igor Gajic

Član broj: 93194
Poruke: 747
*.static.sbb.rs.



+987 Profil

icon Re: C# Konstruktori i virtuelne metode31.01.2011. u 13:49 - pre 160 meseci
Ubacis taj kod u VS i vidi sta ti ispisuje :)

To je sasvim legalan kod
 
Odgovor na temu

Chodaboy33
Danilo Vlaisavljevic
Zrenjanin

Član broj: 97511
Poruke: 23
*.adsl.eunet.rs.



Profil

icon Re: C# Konstruktori i virtuelne metode01.02.2011. u 08:55 - pre 160 meseci
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. :)

 
Odgovor na temu

Mikelly

Član broj: 16730
Poruke: 389
77.222.25.*



Profil

icon Re: C# Konstruktori i virtuelne metode01.02.2011. u 20:46 - pre 160 meseci
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.
 
Odgovor na temu

Boris_ZR
Boris Gligorijević
IT-Consultant / Software Engineer
PRODYNA AG
Munich

Član broj: 173158
Poruke: 123
*.dynamic.sbb.rs.



+21 Profil

icon Re: C# Konstruktori i virtuelne metode05.10.2011. u 22:46 - pre 152 meseci
Kolega, jel' to primer sa pismenog iz PJP sa FON-a? :)
Slični zadatak je nama Marko davao na ispitu, voli čovek polimorfizam...
 
Odgovor na temu

[es] :: .NET :: C# Konstruktori i virtuelne metode

[ Pregleda: 3670 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

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