2010-12-09 45 views
0

J'ai une classe définie par l'utilisateurC#, peut méthodes PROROGATION ajoutée aux classes définies par l'utilisateur en C# (pas de classes de base)

public class Student 
{ 
    int rollno; 
    public getrollno() 
    { 
     return rollno; 
    } 
} 

Je veux avoir méthode d'extension checkifRollnoIs1() qui retournera vrai ou faux.

Puis-je le faire & comment puis-je le faire?

+0

pourquoi voulez-vous que ce soit une méthode d'extension? –

+0

D'accord avec Matt - pourquoi utiliser la méthode d'extension, quand vous pouvez simplement modifier la classe? Le point entier des méthodes d'extension est la capacité à "étendre" les classes, quand il n'y a pas d'autre moyen de faire de la publicité. – Hassan

Répondre

5

Voici une façon d'écrire un:

public static class StudentExtensions 
{ 
    public static bool checkifRollnoIs1(this Student s) 
    { 
    return s.getrollno() == 1; 
    } 
} 

Par ailleurs - les méthodes d'extension ne sont pas réellement ajoutées à une classe, ils semblent juste de cette façon (magie IntelliSense).

+0

Il vous manque le nom de la variable: public static bool checkifRollnoIs1 (cet étudiant Étudiant) {return student.rollno == 1; } ' – VVS

+0

@VVS - Oui, remarqué il y a quelques minutes. – Oded

+0

En supposant que rollno est public. Pour les variables privées, cela nécessiterait une réflexion. – VVS

0

Oui, vous pouvez ajouter une méthode d'extension.

public static class MyExtensions 
{ 
    public static bool checkifRollnoIs1(this Student student) 
    { 
     return student.getrollno() == 1; 
    } 
} 

Source

Bien que si vous avez accès à la source, pourquoi avez-vous besoin d'une méthode d'extension?

0

Vous pouvez ajouter une méthode d'extension pour tout objet pouvant être transmis à une méthode statique pour certaines opérations.

Pour le compilateur, la méthode d'extension n'est rien de plus qu'une méthode statique.

Si vous avez une méthode d'extension pour "CheckIfRollNoIs1", dans ce cas, votre appel,

studentObj.CheckIfRollNoIs1() 

est converti en,

StudentExtensions.CheckIfRollNoIs1(studentObj)