-
Collection du processus d'implémentation de l'indexeur en C#
L’un des aspects les plus intéressants du langage C# est l’indexeur de classes. Pour faire simple, ce qu'on appelle l'indexeur est un type spécial d'attribut grâce auquel vous pouvez référencer votre propre classe comme un tableau. Évidemment, cette fonctionnalité est particulièrement utile lors de la création de classes de collection, mais dans d'autres situations, comme le traitement de fichiers volumineux ou l'abstraction de certaines ressources limitées, il est bien sûr également très utile d'avoir un comportement de type tableau dans une classe. Cet article vous guidera dans la configuration d'une classe pour utiliser un indexeur. Mais d’abord, décrivons le concept de propriétés pour fournir les informations nécessaires.
Propriétés Si vous avez déjà écrit un programme en VB6, vous devez être très familier avec les méthodes de propriété. Les méthodes de propriété sont en fait des membres de classe spéciaux qui implémentent un accès contrôlé aux champs de classe privée. Il existe deux méthodes d'attribut dans le langage C#. L'une est get, grâce à laquelle la valeur du champ privé peut être renvoyée, et la seconde est set, grâce à laquelle la valeur du champ privé peut être définie. Par exemple, en prenant le code suivant comme exemple, une propriété FirstName est créée pour contrôler l'accès au prénom du membre de la classe privée :
classe Personne {
chaîne privée prénom ;
chaîne publique Prénom {
obtenez {retour prénom;}
définir {prénom = valeur ;}
}
}
Les déclarations de propriété peuvent être codées comme suit :
Personne p = nouvelle Personne();
p.Premier = "Lamont";
Console.WriteLine (p.FirstName);
Comme vous pouvez le constater, la déclaration d'attribut ressemble davantage à une déclaration de domaine, sauf qu'elle déclare également deux membres spéciaux qui, selon Microsoft, sont ce qu'on appelle des accesseurs. La fonction get access est appelée lorsqu'une propriété est appelée sur le côté droit d'une expression ou lorsque la propriété est utilisée comme paramètre d'un autre sous-programme (ou fonction). À l’inverse, la fonction d’accès set est appelée lorsque la propriété est appelée sur le côté gauche de l’expression et que la valeur du champ privé est définie en passant implicitement le paramètre value. Vous pouvez créer des propriétés en lecture seule en omettant la fonction d'accesseur set, de sorte que toute tentative de définition de la propriété génère une erreur de compilation.
Avantages de l'utilisation des indexeurs
Ci-dessous sa structure
...{
obtenir
...{
// Récupérer les codes va ici
}
ensemble
...{
// Définir les codes va ici
}
}
Note:
modificateur : modificateur, tel que privé, public, protégé ou interne
this : Il s'agit d'un mot-clé spécial en C#, qui représente l'instance actuelle de la classe de référence. Ici, cela signifie l'index de la classe actuelle.
liste d’arguments : il s’agit des paramètres de l’indexeur.
Après avoir longuement discuté, passons au sujet, alors pourquoi dois-je tourner dans ce cercle ? En fait, cela est dû au fait que l’indexeur d’une classe ressemble beaucoup à une propriété, et c’est également le cas du point de vue du code. Voici un exemple de classe avec un indexeur qui renvoie une chaîne :
Échantillon de classe {
chaîne publique this [index int] {
get {return "Vous avez réussi" + index ;
}
}
Notez que le nom de l'attribut ici est celui-ci, qui fait référence à l'instance actuelle de la classe, et que la liste des paramètres est placée entre crochets au lieu de parenthèses. Il s'agit également d'un indexeur en lecture seule. Afin de le changer en type lecture/écriture, j'ai ajouté une fonction d'accès défini. Lors de la définition d'un indexeur, vous ne prenez pas nécessairement un seul paramètre. Les paramètres de l'indexeur peuvent être de n'importe quel type, mais int est généralement le type le plus raisonnable. Il est également possible d'avoir plusieurs indexeurs (surchargés) dans la même classe.
Après avoir défini la classe Sample comme ci-dessus, nous pouvons utiliser l'indexeur comme attribut par défaut, comme indiqué ci-dessous :
Échantillon s = nouvel échantillon ();
Console.WriteLine(s[55]);
Propriétés et indexeurs Il existe plusieurs différences entre les propriétés et les indexeurs :
Chaque attribut de la classe doit avoir un nom unique et chaque indexeur défini dans la classe doit avoir une signature ou une liste de paramètres unique (afin que la surcharge de l'indexeur puisse être implémentée).
Les propriétés peuvent être statiques et les indexeurs doivent être des membres d'instance.
Les fonctions d'accès définies pour les indexeurs ont accès aux paramètres transmis à l'indexeur, tandis que les fonctions d'accès aux propriétés n'ont aucun paramètre.
Le comportement des interfaces de type tableau est souvent favorisé par les implémenteurs de programmes, vous pouvez donc également définir des indexeurs pour l'interface. Les interfaces de collection IList et IDictionary déclarent des indexeurs pour accéder à leurs éléments stockés.
Lors de la déclaration d'un indexeur pour une interface, rappelez-vous que la déclaration indique uniquement l'existence de l'indexeur. Il vous suffit de fournir les fonctions d'accès appropriées, sans inclure de modificateurs de portée. Le code suivant déclare l'indexeur dans le cadre de l'interface IImplementMe :
interface IIimplementMe {
chaîne this[int index]
{
obtenir;
ensemble;
}
La classe implémentée correspondante doit définir spécifiquement les fonctions d'accès get et set pour l'indexeur de IimplementMe.
C’est un aperçu de base des indexeurs. Vous devriez maintenant mieux comprendre le rôle que jouent les indexeurs dans votre développement.
classe SampleCollection
{
privé T[] arr = nouveau T[100];
public T ceci[int i]
{
obtenir
{
retourner arr[i];
}
ensemble
{
arr[je] = valeur ;
}
}
}
// Cette classe montre comment le code client utilise l'indexeur
Programme de classe
{
static void Main(string[] arguments)
{
SampleCollection
stringCollection[0] = "Bonjour tout le monde";
System.Console.WriteLine(stringCollection[0]);
}
}
Cet article provient du blog CSDN Veuillez indiquer la source lors de la réimpression : http://blog.csdn.net/licheng19891020/archive/2009/12/09/4974516.aspx .
-