Première chose, ne déclare pas un champ de classe comme public. Utilise un champ privé et une propriété publique pour l'accès extérieur. Principe d'encapsulation.
Ensuite, dans ton code tu fais
return String.Compare(num, p.num);
mais num est un entier et tu cherches à faire une comparaison de chaîne, il y a comme un problème donc 
Voici la classe mise à jour
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| class HexNumber : IComparable
{
private int _num;
public int Num
{
get { return _num; }
}
public HexNumber(int num)
{
this._num = num;
}
int System.IComparable.CompareTo(object obj)
{
HexNumber p = obj as HexNumber;
if (_num == p._num)
{
return 0;
}
else
{
return (_num > p._num) ? 1 : -1;
}
}
} |
Si jamais tu utilises le framework 2 ou ultérieur, passe plutôt par la version générique de l'interface
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| class HexNumber : IComparable<HexNumber>
{
private int _num;
public int Num
{
get { return _num; }
}
public HexNumber(int num)
{
this._num = num;
}
int IComparable<HexNumber>.CompareTo(HexNumber other)
{
if (_num == other._num)
{
return 0;
}
else
{
return (_num > other._num) ? 1 : -1;
}
}
} |
Pour finir
Console.WriteLine("{0},({1} dezimal)", t, (int)t);
ne compilera pas. Utilise
Console.WriteLine("{0},({1} dezimal)", t, t.Num);
Partager