Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
.NET Framework
Non riesco a afferrare logicamente come si richiama il metodo CompareT...
venerdì 25 settembre 2009 - 10.23
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
cosmopsis
Profilo
| Junior Member
74
messaggi | Data Invio:
ven 25 set 2009 - 10:23
Ho trovato questo esempio in rete (l'ho adattato un po' rispetto all'originale) . Riguarda l'interfaccia IComparable.
Bisogna ordinare un'array di oggetti punti di classe Point.
class App {
static void Main(string[] args) {
Point[] punti = new Point[5];
punti[0] = new Point(2, 2);
punti[1] = new Point(3, 2);
punti[2] = new Point(2, 3);
punti[3] = new Point(7, 8);
punti[4] = new Point(0, 1);
Array.Sort(punti); //qui si confrontano gli oggetti presenti nell'array
for(Int32 i = 0; i < punti.Length; i++){
Console.WriteLine("Punto {0}: {1}", i, punti[i]);
}
Console.Read();
}
}//fine classe App
La classe Point (che definisce l'interfaccia) è definita così:
class Point : IComparable
{
public Int32 x, y;
public Point(Int32 x, Int32 y)
{
this.x = x;
this.y = y;
}
// CompareTo è definita dall'interface IComparable
public Int32 CompareTo(Object other)
{
Point p = (Point)other;
Double xx = Math.Sqrt(x * x + y * y);
Double yy = Math.Sqrt(p.x * p.x + p.y * p.y);
return (Math.Sign(xx - yy));
}
public override String ToString()
{
return (String.Format("({0}, {1})", x, y));
}
}
Il problema è che (come da oggetto) non riesco ad afferrare logicamente come si richiama il metodo CompareTo (nell'esempio) quando si esegue l'istruzione Array.Sort(punti). Qualcuno mi può far capire?
Grazie.
phai
Profilo
| Newbie
19
messaggi | Data Invio:
ven 25 set 2009 - 18:12
>Il problema è che (come da oggetto) non riesco ad afferrare logicamente
>come si richiama il metodo CompareTo (nell'esempio) quando si
>esegue l'istruzione Array.Sort(punti). Qualcuno mi può far capire?
Ciao,
SE HO BEN CAPITO non afferri il meccanismo che permette di richiamare il CompareTo quando si invoca un Sort.
Di solito in altri linguaggi in cui sono definiti i comparatori (pertanto molto probabilmente anche in C#) quando si invoca un metodo di ordinamento (Sort in questo caso) è la virtual machine che, in fase di runtime, verifica se l'oggetto implementa il comparatore.
Nel tuo caso l'oggetto lo implementa e pertanto esegue l'algoritmo di ordinamento che tu hai definito (implementando così l'interfaccia IComparable) per decidere il criterio da seguire per l'ordinamento. L'algoritmo per l'rdinamento, invece, è stabilito dall'implementazione nel framework del metodo Sort.
Se l'oggetto fosse un numero l'ordinamento da seguire sarebbe numerico, se fosse una stringa sarebbe alfabetico, e così via (in alcuni linguaggi per gli oggetti in cui non è definito avviene sulla base della rappresentazione stringa dell'oggetto)... implementando l'interfaccia quindi tu non definisci l'algoritmo di ordinamento, ma i parametri di verifica dell'ordinamento stesso che vengono richiamati in automatico.
cosmopsis
Profilo
| Junior Member
74
messaggi | Data Invio:
sab 26 set 2009 - 00:56
Ok ho capito. Grazie.
Torna su
Stanze Forum
Elenco Threads
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?
Dopo esserti registrato potrai chiedere
aiuto sul nostro
Forum
oppure aiutare gli altri
Consulta le
Stanze
disponibili.
Registrati ora !