Avatar
Preedy
Člen
Avatar
Preedy:

č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
Odpovídá na Preedy
Luboš Běhounek (Satik):

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:
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:

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:

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:

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:

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:

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

 
Nahoru Odpovědět 10.3.2013 17:44
Avatar
Odpovídá na Preedy
Luboš Běhounek (Satik):
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š Běhounek (Satik)
Preedy:

: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.