2011-11-09 5 views
0

Comme je suis nouveau au langage de programmation C# je suis un peu confus au sujet de la syntaxe C#.Pourquoi un.compareTo (b) est-il égal à compareTo (a, b) ou a.method (b) = méthode (a, b)?

Une méthode qui peut obtenir deux valeurs pour comparer ces deux valeurs peut s'écrire a.compareTo(b) au lieu de compareTo(a,b) Comment est-ce possible?

En supposant que compareTo un retour int est enchaîné à int et obtient par rapport à la a variables! Comment?

Merci d'avance.

Répondre

1

En C#, le mot-clé int représente réellement une structure de type System.Int32. Ce type a plusieurs méthodes disponibles sur lui, l'un d'entre eux étant CompareTo(Int32) comme vous l'avez vu.

CompareTo pour un objet Int32 prend dans une valeur entière, compare cette valeur à lui-même et renvoie le résultat, très simplement comme ceci:

public int CompareTo(int value) 
{ 
    if (this < value) 
    { 
     return -1; 
    } 
    if (this > value) 
    { 
     return 1; 
    } 
    return 0; 
} 

Le mot-clé this fait référence à l'instance actuelle du type que ce méthode appartient à, dans votre cas a.

La documentation pour Int32 et ses méthodes peut être trouvée here.

+0

tnx pour votre réponse mais ce que je suis coincé avec isnt la méthode comparTo. je veux savoir comment il est possible pour une méthode comme celle-ci "int Somme (int a, int b) {return a + b)" soit appelée par cette syntaxe a.sum (b) au lieu de sum (a, b) – 1AmirJalali

+0

Connaissez-vous la syntaxe 'this' et le contexte d'une méthode qui s'exécute sur une instance d'une classe? De quelle langue venez-vous, ou est-ce que C# est votre premier? – Kasaku

0

Comme par documentation:

Cette méthode est seulement une définition et doit être mis en œuvre par un type de classe ou valeur spécifique pour avoir un effet. La signification des comparaisons spécifiées dans la section Valeur de retour ("précède", "se produit dans la même position que" et "suit") dépend de l'implémentation particulière.

Dans l'exemple, ils comparent des températures par sa valeur Fahrenheit qui est un double:

public int CompareTo(object obj) { 
    if (obj == null) return 1; 

    Temperature otherTemperature = obj as Temperature; 
    if (otherTemperature != null) 
     return this.temperatureF.CompareTo(otherTemperature.temperatureF); 
    else 
     throw new ArgumentException("Object is not a Temperature"); 
} 

Mais dans votre classe, vous pouvez décider comment comparer une instance contre un autre.

Questions connexes