¿Cómo implementar la interfaz IComparable?

Estoy poblando una matriz con instancias de una clase:

BankAccount[] a; . . . a = new BankAccount[] { new BankAccount("George Smith", 500m), new BankAccount("Sid Zimmerman", 300m) }; 

Una vez que complete esta matriz, me gustaría ordenarla por cantidades de saldo. Para hacer eso, me gustaría poder verificar si cada elemento se puede ordenar usando IComparable .
Necesito hacer esto usando interfaces. Hasta ahora tengo el siguiente código:

 public interface IComparable { decimal CompareTo(BankAccount obj); } 

Pero no estoy seguro de si esta es la solución correcta. ¿Algún consejo?

Usted no debe definir IComparable usted mismo. Ya está definido.

Por el contrario, debe implementar IComparable en su clase BankAccount .

Donde definió la class BankAccount , asegúrese de que implementa la interfaz IComparable

Luego escriba BankAccout.CompareTo para comparar las cantidades de saldo de los dos objetos.


Editar

 public class BankAccount : IComparable { [...] public int CompareTo(BankAccount that) { if (this.Balance > that.Balance) return -1; if (this.Balance == that.Balance) return 0; return 1; } } 

Edite 2 para mostrar la buena respuesta de Jeffrey L Whitledge:

 public class BankAccount : IComparable { [...] public int CompareTo(BankAccount that) { return this.Balance.CompareTo(that.Balance); } } 

IComparable ya existe en .NET con esta definición de CompareTo

 int CompareTo(Object obj) 

Se supone que no debes crear la interfaz, se supone que debes implementarla.

 public class BankAccount : IComparable { int CompareTo(Object obj) { // return Less than zero if this object // is less than the object specified by the CompareTo method. // return Zero if this object is equal to the object // specified by the CompareTo method. // return Greater than zero if this object is greater than // the object specified by the CompareTo method. } } 

¿Quieres ordenar de forma destructiva la matriz? Es decir, ¿desea realmente cambiar el orden de los elementos en la matriz? ¿O solo quieres una lista de los artículos en un orden en particular, sin destruir el orden original?

Sugeriría que casi siempre es mejor hacer esto último. Considere usar LINQ para un orden no destructivo. (Y considere usar un nombre de variable más significativo que “a”).

 BankAccount[] bankAccounts = { whatever }; var sortedByBalance = from bankAccount in bankAccounts orderby bankAccount.Balance select bankAccount; Display(sortedByBalance); 

Una alternativa es usar LINQ y omitir la implementación de IComparable por completo:

 BankAccount[] sorted = a.OrderBy(ba => ba.Balance).ToArray(); 

Ya existe IComparable , pero idealmente debería ser compatible tanto con IComparable como con IComparable . Usar el Comparer.Default es generalmente una opción más fácil. Array.Sort , por ejemplo, aceptará dicho comparador.

Si solo necesita ordenar estas BankAccounts , use LINQ como sigue

 BankAccount[] a = new BankAccount[] { new BankAccount("George Smith", 500m), new BankAccount("Sid Zimmerman", 300m) }; a = a.OrderBy(bank => bank.Balance).ToArray();