Hogyan érhetem el, hogy, ha egy generikus osztályú objektum referenciát tartalmaz egy másik (nem-generikus) osztály objektumára, akkor az első osztályon keresztül hivatkozhassak a második osztály objektumának egy publikus tulajdonságára?
if(aktuális.tartalom.Értékelés<minimum.tartalom.Értékelés)
{
minimum=aktuális;
}
Az 'aktuális' a generikus osztály objektuma (aminek egy metódusából van a fenti kódrészlet), a 'tartalom' egy belső osztály 'T' típusú generikus változó, ennek van elméletileg értékül adva egy másik, nem-generikus osztály nem-generikus objektuma, és ennek egy tulajdonsága az 'Értékelés'.
A probléma, hogy ez a tulajdonság egyáltalán nem látható, és hivatkozható fent leírt módon.
'T' does not contain a definition for 'Értékelés' and no extension method 'Értékelés' accepting a first argument of type 'T' could be found (are you missing a using directive or an assembly reference?) (CS1061)
Mi a baja?
Ez csak valami hatalmas katyvasz.
A teljes kódot másold be.
class BinárisKeresőfa<T, K> where K: IComparable
{
public class FaElem
{
public T tartalom;
public K kulcs;
public FaElem bal;
public FaElem jobb;
public FaElem(T tartalom, K kulcs)
{
this.tartalom = tartalom;
this.kulcs = kulcs;
}
}
FaElem gyökér;
public void Beszúr(T tartalom, K kulcs)
{
Beszúr(ref gyökér, tartalom, kulcs);
}
void Beszúr(ref FaElem aktuális, T tartalom, K kulcs)
{
if(aktuális == null)
{
aktuális = new FaElem(tartalom, kulcs);
}
else
{
if(aktuális.kulcs.CompareTo(kulcs)<0)
{
Beszúr(ref aktuális.jobb, tartalom, kulcs);
}
else if(aktuális.kulcs.CompareTo(kulcs)>0)
{
Beszúr(ref aktuális.bal, tartalom, kulcs);
}
}
}
public FaElem MinimumÉrtékeléstKeres()
{
return MinimumÉrtékeléstKeres(ref gyökér.bal, ref gyökér);
}
FaElem MinimumÉrtékeléstKeres(ref FaElem aktuális, ref FaElem minimum)
{
if(aktuális != null)
{
if(aktuális.tartalom.Értékelés<minimum.tartalom.Értékelés)
{
minimum=aktuális;
}
MinimumÉrtékeléstKeres(ref aktuális.bal, ref minimum);
MinimumÉrtékeléstKeres(ref aktuális.jobb, ref minimum);
if(aktuális.kulcs.CompareTo(0)==0)
return minimum;
}
}
Szerintem ennél többet azért nem másolok. Így is hosszú.
Ez tényleg hatalmas katyvasz.
Nem tudom mi ez az Értékelés property de én nem látom sehol.
Generikus osztályt akarsz írni, úgy, hogy nem generikus tulajdonságokra hivatkozol, ennek így nincs túl sok értelme.
Ráadásul mi ez a sok referencia szerinti paraméterátadás?
Nagyon nem egészséges.
csinálsz egy interfészt aminek van Értékelés propertyje, pl
interface IMyErtekeles
{
public int Értékelés {get; set;}
}
és a BinárisKeresőfa osztályodnál megadod, hogy where T:IMyErtekeles
pont ahogy a IComparable-t adod meg
Bullshit.
Egy generikus bináris keresőfában mit keres egy random akármit is jelentő property?
Inkább a rendezést kéne definiálni az elemeken normálisan.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!