Kezdőoldal » Számítástechnika » Programozás » Hogyan érhetem el, hogy, ha...

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?

Figyelt kérdés

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?



2017. ápr. 28. 20:35
 1/7 anonim ***** válasza:

Ez csak valami hatalmas katyvasz.

A teljes kódot másold be.

2017. ápr. 28. 20:44
Hasznos számodra ez a válasz?
 2/7 A kérdező kommentje:

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

2017. ápr. 28. 20:47
 3/7 anonim ***** válasza:

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.

2017. ápr. 28. 21:03
Hasznos számodra ez a válasz?
 4/7 anonim ***** válasza:

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

2017. ápr. 28. 21:04
Hasznos számodra ez a válasz?
 5/7 anonim ***** válasza:

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.

2017. ápr. 28. 21:13
Hasznos számodra ez a válasz?
 6/7 anonim ***** válasza:
Én csak arra vagyok kíváncsi, hogy ezt melyik egyetemen tanítják ÍGY...
2017. ápr. 28. 22:09
Hasznos számodra ez a válasz?
 7/7 anonim ***** válasza:
Nagyon remélem, hogy sehol. :D
2017. ápr. 28. 22:36
Hasznos számodra ez a válasz?

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

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!