Ejla!
Zanima me predvsem rezervirana beseda new pri dedovanju.
Primer:
Ce zdaj jz prav razumem, mi prevajalnik skrije metodo iz dedovanega razred, ko poklicem instanco razreda B.
Zdaj, zanima me, če pokliče tudi metodo iz A?
Če prav razumem, je nebi smel. Ko pa debug-am, mi pa skoči v A. Ali sem to narobe razumel?
Zanima me predvsem rezervirana beseda new pri dedovanju.
Primer:
public class A
{
public void Start()
{
Console.WriteLine("Test A");
}
}
public class B : A
{
public new void Start()
{
Console.WriteLine("Test B");
}
}
Ce zdaj jz prav razumem, mi prevajalnik skrije metodo iz dedovanega razred, ko poklicem instanco razreda B.
B razredB = new B();
B.Start();
Zdaj, zanima me, če pokliče tudi metodo iz A?
Če prav razumem, je nebi smel. Ko pa debug-am, mi pa skoči v A. Ali sem to narobe razumel?
Avtor: bojanv, objavljeno na portalu SloDug.si (Arhiv)
fluethy - sreda, 28. avgust 2024
<a href=https://enhanceyourlife.mom/>priligy 30 mg</a> Damman K, Jaarsma T, Voors AA, Navis G, Hillege HL, van Veldhuisen DJ Both in and out hospital worsening of renal function predict outcome in patients with heart failure results from the Coordinating Study Evaluating Outcome of Advising and Counseling in Heart Failure COACH
bojanv - sreda, 15. marec 2006
Na zalost sem vezan na isto ime....ni panike...bom nardil pa brez dedovanja....
AndrejT - sreda, 15. marec 2006
Vsekakor mi je osebno ljubša rešitev uporaba metode z drugim imenom; je bolj jasno in tudi razumljivo... V tvojem primeru pa si verjetno spet vezan na to, da moraš uporabiti isto ime.
MihaM - sreda, 15. marec 2006
Potem pa niti nimaš izbire: ali new ali pa metoda z drugim imenom.
bojanv - sreda, 15. marec 2006
To mi je jasno....najvecji problem je tukaj, da ne smem spreminjati razreda, od katerega dedujem....ker drugace bi dal virtual spredaj, v dedovanem override pa bi bla stvar resena....
AndrejT - torek, 14. marec 2006
Mogoče je vaš problem podoben zgornjemu primeru... Skrivanje metod z new je lahko nevarno - dedovan razredB ima v tvojem primeru dve metodi Start(): svojo in tisto osnovnega razreda. Če pa v razredu B metodo Start() razreda A enostavno prekriješ (override), zagotoviš, da se bo vedno izvajala metoda dedovanega razreda B [seveda pa znotraj nje lahko pokličeš tudi metodo osnovnega razreda A].
bojanv - torek, 14. marec 2006
Torej sem imel prav.... ja, razredB.Start(); je , tipkarska napaka..... sej zaradi tega se gre...ko smo probali v debug-u, nam je skoclo v razred A, kar mi pa ni jasno zakaj je to nardil....mogoce je pa kaksen bug to razumem, ce bi sel nivo nizje, da bi poklical metodo iz razreda, ki ga dedujemo.... kul, hvala za informacije...dobro, da si nisem zmesal pojmov...
AndrejT - torek, 14. marec 2006
Metoda Start razreda B (označena z besedo new) v tvojem primeru skrije metodo v razredu A. Metoda razreda A se v tem primeru ne bi smela izvajati. Si prepričan, da gre proces v debug modu skozi razred A? Če pa izvedeš naslednjo kodo: A razredB = new B(); razredB.Start(); ...potem pa res pokličeš metodo Start razreda A. BTW: vrstica v tvojem primeru bi se morala brati razredB.Start();?