Diskuze: dědičnost

C# .NET .NET (C# a Visual Basic) dědičnost American English version English version

Aktivity (1)
Avatar
Preedy
Člen
Avatar
Preedy:10.3.2013 16:58

čus, mám bázovou třídu a v ní metody(virtuální) z této třídy dědím a do zděděné třídy připíšu další metody a "ouvrajdnu" ty virtuální. Vytvořím si instanci zděděné třídy a chci zavolat ty metody, ale jdou mi zavolat jenom ty override, ale ty které jsou jenom v té zděděné třídě(všechny metody jsou veřejné) mi zavolat nejdou :( Nevíte v čem je chyba(určitě to bude zas nějaká blbost)?? dík

 
Odpovědět 10.3.2013 16:58
Avatar
Luboš Satik Běhounek
Autoredaktor
Avatar
Odpovídá na Preedy
Luboš Satik Běhounek:10.3.2013 17:05

Pošli asi ukázku toho kódu, tam to bude snad hned zřejmé :)

Nahoru Odpovědět 10.3.2013 17:05
:)
Avatar
Preedy
Člen
Avatar
Preedy:10.3.2013 17:21
public abstract class Zvire
 {
     protected string zvuk;
     public Zvire(string zvuk)
     {
         this.zvuk = zvuk;
     }
     public virtual string Zvuk()
     {
         return this.zvuk;
     }
 }
 public class Pes : Zvire
 {
     private bool zije;
     public Pes(string zvuk)
         : base(zvuk)
     {
         this.zvuk = zvuk;
     }
     public override string Zvuk()
     {
         return base.Zvuk();
     }
     public bool Zije
     {
         get
         {
             return this.zije;
         }
     }
 }
class Program
   {
       static void Main(string[] args)
       {
             List<Zvire> zvirata = new List<Zvire>();
             zvirata.Add(new Pes("haf"));
             zvirata[0].Zije() - nejde zavolat, Zvuk() - jde zavolat
       }
   }
 
Nahoru Odpovědět 10.3.2013 17:21
Avatar
Preedy
Člen
Avatar
Preedy:10.3.2013 17:21

asi takhle viz. nahore

Editováno 10.3.2013 17:22
 
Nahoru Odpovědět 10.3.2013 17:21
Avatar
Fugiczek
Redaktor
Avatar
Odpovídá na Preedy
Fugiczek:10.3.2013 17:26

Mas List zvirat a ti maji metodu jen zvuk(). Kdyby jsi mel List psu pujde ti volat i metoda zije().

 
Nahoru Odpovědět  +1 10.3.2013 17:26
Avatar
Preedy
Člen
Avatar
Odpovídá na Fugiczek
Preedy:10.3.2013 17:30

aha, ale když mi tam šli hodit psi, tak jsem myslel že vlastost Zije pujde zavolat

 
Nahoru Odpovědět 10.3.2013 17:30
Avatar
Fugiczek
Redaktor
Avatar
Odpovídá na Preedy
Fugiczek:10.3.2013 17:36

Udelal jsi si List zvirat takze muzes u polozek toho listu vyuzit vsechny vlastnosti zvirat. Muzes do toho Listu dat jakehokoliv potomka zvirete, ale muzes vyuzit jen vlastnosti zvirete. Pokud chces volat metodu zijes muzes si to pri ziskavani polozky pretypovat, ale musis si byt jistej ze zrovna na tom indexu je pes, jinak ti to vyhodi nejakou vyjimku ale toto by se nemelo delat :-D

 
Nahoru Odpovědět  +1 10.3.2013 17:36
Avatar
Preedy
Člen
Avatar
Odpovídá na Fugiczek
Preedy:10.3.2013 17:44

dík, zkusím to přes to přetypování

 
Nahoru Odpovědět 10.3.2013 17:44
Avatar
Luboš Satik Běhounek
Autoredaktor
Avatar
Odpovídá na Preedy
Luboš Satik Běhounek:10.3.2013 17:45
if (zvirata[0] is Pes)
{
    (zvirata[0] as Pes).Zije();
}
Nahoru Odpovědět  +1 10.3.2013 17:45
:)
Avatar
Preedy
Člen
Avatar
Odpovídá na Luboš Satik Běhounek
Preedy:10.3.2013 17:51

:D přesně takhle jsem to taky uudělal

 
Nahoru Odpovědět 10.3.2013 17:51
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 10 zpráv z 10.