Forum » Programiranje » [C#] overloaded operator ==
[C#] overloaded operator ==
losnah ::
Težave imam z overloadanjem in ker nisem na internetu najdu nč pametnga, morem uprašat tuki.
Rad bi primerjal dva razreda A in B. If(A == B) then neki; ... Primerjal bi spremenljivke x , y, z. Če bi bile enake bi bil pogoj true.
Spodi je koda ki sem jo spisol s pomočjo še enih strani sam ne dela. A mi lahko napišete pravilno oziroma kaj je narobe v kodi.
Zakaj morem overloadad še operator !=?
Zakaj morem dat še getHashCode(), in kaj naj bi to sploh počel pr men?
Kaj za vraga je tist object?
To sm prepisal z interneta. Sam neki ni kul.
------------------------------------------------------------------------------------------------------------
Rad bi primerjal dva razreda A in B. If(A == B) then neki; ... Primerjal bi spremenljivke x , y, z. Če bi bile enake bi bil pogoj true.
Spodi je koda ki sem jo spisol s pomočjo še enih strani sam ne dela. A mi lahko napišete pravilno oziroma kaj je narobe v kodi.
Zakaj morem overloadad še operator !=?
Zakaj morem dat še getHashCode(), in kaj naj bi to sploh počel pr men?
Kaj za vraga je tist object?
To sm prepisal z interneta. Sam neki ni kul.
public override bool Equals(object o) { if((Plane)o.x == this.x && (Plane)o.y == this.y && (Plane)o.z == this.z) return true; else return false; }
------------------------------------------------------------------------------------------------------------
class Plane { private int x, y, z public override bool Equals(object o) { if((Plane)o.x == this.x && (Plane)o.y == this.y && (Plane)o.z == this.z) return true; else return false; } public static bool operator ==(Plane p1, Plane p2) { return p1.Equals(p2); } public static bool operator !=(Plane p1, Plane p2) { return ! p1.Equals(p2); } public override int GetHashCode() { return 1; } }
atasmrk ::
Glede tega, da ti koda ne dela, Vec je oklepajev bolje je. Vsaj meni se tako zdi. Sovrazim, ce mi kak program ne pusti dati pogoja pri if v oklepaje. Zdi se mi, da ne prebavi tistega (nekaj == seNekaj && ...). Poizkusi ((nekaj == seNekaj) && (...)).
Zakaj moras overloadati se != operator: tole je ze en saj nazaj kar sem se ukvarjeal s tem, ampak mislim, da neki operatorji nastopajo v parih. Prav tako pa tudi nastopata par == in Equals in != getHashCode.
Object pa je praata vseh objektov v C#. Tako lahko primerjas bilokatere objekte med sabo, recimo, lahko bi prinerjal string z integerjem, ce bi prav spisal tale Equals.
Tako si jaz to predstavljam. Niti pod razno ni nujno, da je tako. Saj bo se kaksen komentar padel, pa se bom se jaz kaj naucil.
Zakaj moras overloadati se != operator: tole je ze en saj nazaj kar sem se ukvarjeal s tem, ampak mislim, da neki operatorji nastopajo v parih. Prav tako pa tudi nastopata par == in Equals in != getHashCode.
Object pa je praata vseh objektov v C#. Tako lahko primerjas bilokatere objekte med sabo, recimo, lahko bi prinerjal string z integerjem, ce bi prav spisal tale Equals.
Tako si jaz to predstavljam. Niti pod razno ni nujno, da je tako. Saj bo se kaksen komentar padel, pa se bom se jaz kaj naucil.
Zgodovina sprememb…
- spremenilo: atasmrk ()
losnah ::
if((Plane)o.x == this.x && ...
Ko napišem "(Plane)o. " mi da na razpolago samo :
GetType
GetHash
ToString
Equals
Tist ko sem jest napisu x " (Plane)o.x " sem nek vidu kako je narejen sam men ne ponudi x.
Ko napišem "(Plane)o. " mi da na razpolago samo :
GetType
GetHash
ToString
Equals
Tist ko sem jest napisu x " (Plane)o.x " sem nek vidu kako je narejen sam men ne ponudi x.
Gundolf ::
Razjasni se, hoces primerjati dva objekta istega razreda ali razlicnih razredov?
Drugace pa ce napises ((Plane)o). ti bo morda ponudil tudi x.
BTW, pojma nimam o C#
Drugace pa ce napises ((Plane)o). ti bo morda ponudil tudi x.
BTW, pojma nimam o C#
losnah ::
dva objekta istega razreda.
Plane A = new Plane();
Plane B = new Plane();
.
.
.
if(A == B){
// x, y, z so enaki v obeh objektih
}
else{
// vsaj ena spremenljivka x, y, z je razlicna v obeh objektih
}
Plane A = new Plane();
Plane B = new Plane();
.
.
.
if(A == B){
// x, y, z so enaki v obeh objektih
}
else{
// vsaj ena spremenljivka x, y, z je razlicna v obeh objektih
}
user4683 ::
Še dodatek k vsem tem...
namesto:
if( ((Plane)o).x == this.x && ((Plane)o).y == this.y && ....
naredi takole:
Plane p = (Plane)o;
if( p.x == this.x && p.y == this.y && ....
Ker je pretvarjanje iz objecta v nek dolocen tip zelo zahtevno (unboxing), ter vzame kar nekaj ciklov. Tako namesto da unboxaš trikrat, boš unboxal samo enkrat ( Plane p = (Plane)o ).
namesto:
if( ((Plane)o).x == this.x && ((Plane)o).y == this.y && ....
naredi takole:
Plane p = (Plane)o;
if( p.x == this.x && p.y == this.y && ....
Ker je pretvarjanje iz objecta v nek dolocen tip zelo zahtevno (unboxing), ter vzame kar nekaj ciklov. Tako namesto da unboxaš trikrat, boš unboxal samo enkrat ( Plane p = (Plane)o ).
Sergio ::
No ja, ce je kompajler vsaj na 1/4 pameten, bo unboxal samo enkrat v vsakem primeru.
Tako grem jaz, tako gre vsak, kdor čuti cilj v daljavi:
če usoda ustavi mu korak,
on se ji zoperstavi.
če usoda ustavi mu korak,
on se ji zoperstavi.
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | problemi z javoOddelek: Programiranje | 1131 (736) | MrStein |
» | C# - domača nalogaOddelek: Programiranje | 2226 (1767) | IceBoX |
» | Java ObjektiOddelek: Programiranje | 2262 (1956) | Mavrik |
» | c# kako nareidm kompleksnejsi object in ga primerjam z ==Oddelek: Programiranje | 1004 (832) | Genetic |
» | [Naloga][Java] UlomkiOddelek: Programiranje | 2676 (2524) | SkIDiver |