Membres de type
Mise à jour : novembre 2007
Le runtime vous permet de définir les membres de votre type : événements, champs, types imbriqués, méthodes et propriétés. Chaque membre a une signature. Le tableau suivant décrit les membres de types utilisés dans le .NET Framework.
Membre |
Description |
---|---|
Définit un incident auquel il est possible de répondre et définit les méthodes permettant de s'abonner à l'événement, d'annuler cet abonnement et de déclencher l'événement. Les événements sont souvent utilisés pour signaler d'autres types de changements d'état. |
|
Champ |
Décrit et contient une partie de l'état du type. Les champs peuvent correspondre à n'importe quel type pris en charge par le runtime. |
Définit un type dans la portée du type englobant. |
|
Méthode |
Décrit les opérations disponibles sur le type. La signature d'une méthode spécifie les types autorisés de tous ses arguments et de sa valeur de retour. Un constructeur est un genre de méthode particulier qui crée de nouvelles instances d'un type. |
Nomme une valeur ou un état du type et définit des méthodes pour obtenir ou définir la valeur de la propriété. Les propriétés peuvent être des types primitifs, des collections de types primitifs, des types définis par l'utilisateur ou des collections de types définis par l'utilisateur. Les propriétés sont souvent utilisées pour maintenir l'interface publique d'un type indépendante de la représentation réelle du type. |
Caractéristiques des membres
Le système de type commun (CTS, Common Type System) permet aux membres de types d'avoir diverses caractéristiques, mais les langages ne doivent pas obligatoirement prendre en charge toutes ses caractéristiques. Le tableau suivant décrit ces caractéristiques des membres.
Caractéristique |
Applicable à |
Description |
---|---|---|
abstract |
Méthodes, propriétés et événements |
Le type n'assure pas l'implémentation de la méthode. Les types qui héritent de méthodes abstraites et les types qui implémentent des interfaces avec des méthodes abstraites doivent fournir une implémentation pour la méthode. Une exception : le type dérivé est lui-même un type abstrait. Toutes les méthodes abstraites sont virtuelles. |
private, family, assembly, family et assembly, family ou assembly, ou public |
Toutes |
Définit l'accessibilité du membre :
|
final |
Méthodes, propriétés et événements |
La méthode virtuelle ne peut pas être substituée dans un type dérivé. |
initialize-only |
Champs |
La valeur peut seulement être initialisée et ne peut pas être écrite après initialisation. |
instance |
Champs, méthodes, propriétés et événements |
Si un membre n'est pas marqué static (C# et C++), Shared (Visual Basic), virtual (C# et C++) ou Overridable (Visual Basic), il est membre d'instance (il n'y a pas de mot clé d'instance). La mémoire comptera autant de copies de tels membres que d'objets qui les utilisent. |
literal |
Champs |
La valeur assignée au champ est une valeur fixe, connue au moment de la compilation, d'un type valeur intégré. Les champs de type Literal sont parfois qualifiés de constantes. |
newslot ou override |
Toutes |
Définit comment le membre interagit avec des membres hérités ayant la même signature :
La valeur par défaut est newslot. |
static |
Champs, méthodes, propriétés et événements |
Le membre appartient au type sur lequel il est défini, et non à une instance particulière du type ; le membre existe même si une instance du type n'est pas créée, et il est partagé entre toutes les instances du type. |
virtual |
Méthodes, propriétés et événements |
La méthode peut être implémentée par un type dérivé et peut être appelée de manière statique ou dynamique. Si un appel dynamique est utilisé, le type de l'instance qui effectue l'appel au moment de l'exécution détermine quelle implémentation de la méthode est appelée, plutôt que le type connu au moment de la compilation. Pour appeler une méthode virtuelle de manière statique, un cast en un type qui utilise la version désirée de la méthode devra éventuellement être effectué sur la variable. |
Surcharge
Chaque membre de type a une signature unique. Les signatures de méthode sont composées du nom de la méthode, d'une liste de paramètres (l'ordre et les types des arguments de la méthode). Plusieurs méthodes du même nom peuvent être définies dans un type à condition que les signatures diffèrent. Lorsque plusieurs méthodes du même nom sont définies, la méthode est dite surchargée. Par exemple, dans System.Char, IsDigit est surchargée. Une méthode prend un Char et retourne un Boolean. L'autre méthode prend un String et un Int32 et retourne un Boolean. Des listes de paramètres peuvent également être qualifiées par la contrainte varargs, qui indique que la méthode prend en charge une liste d'arguments variable.
Héritage, substitution et masquage de membres
Un type dérivé hérite de tous les membres de son type de base ; c'est-à-dire que ces membres sont définis sur le type dérivé et disponible pour celui-ci. Le comportement ou les qualités de membres hérités peuvent être modifiés de deux manières :
Un type dérivé peut masquer un membre hérité en définissant un nouveau membre avec la même signature. Cela permet notamment de rendre privé un membre précédemment public ou de définir un nouveau comportement pour une méthode héritée marquée final.
Un type dérivé peut substituer une méthode virtuelle héritée. La méthode de substitution fournit une nouvelle définition de la méthode qui sera appelée en fonction du type de la valeur au moment de l'exécution et non du type de la variable connue au moment de la compilation. Une méthode peut substituer une méthode virtuelle uniquement si la méthode virtuelle n'est pas marquée final et si la nouvelle méthode est au moins aussi accessible que la méthode virtuelle.