Livret – 3.3 Le langage C# dans .Net --- Propriétés, exceptions, flux, formulai

Livret – 3.3 Le langage C# dans .Net --- Propriétés, exceptions, flux, formulaires et contrôles. RM di scala Cours informatique programmation Rm di Scala - http://www.discala.net rm di Scala - 2006 Livret 3.3 : Le langage C# dans .Net : partie 3 - ( rév. 07.12.2005 ) page 1 SOMMAIRE Propriétés et indexeurs 2 Fenêtres et ressources 32 Contrôles dans les formulaires 72 Exceptions comparées 98 Flux et fichiers : données simples 102 Livret 3.3 : Le langage C# dans .Net : partie 3 - ( rév. 07.12.2005 ) page 2 Propriétés et indexeurs en Plan général: 1. Les propriétés 1.1 Définition et déclaration de propriété 1.2 Accesseurs de propriété 1.3 Détail et exemple de fonctionnement d'une propriété Exemple du fonctionnement Explication des actions 1.4 Les propriétés sont de classes ou d'instances 1.5 Les propriétés peuvent être masquées comme les méthodes 1.6 Les propriétés peuvent être virtuelles et redéfinies comme les méthodes 1.7 Les propriétés peuvent être abstraites comme les méthodes 1.8 Les propriétés peuvent être déclarées dans une interface 1.9 Exemple complet exécutable 1.9.1 Détail du fonctionnement en écriture 1.9.2 Détail du fonctionnement en lecture 2. Les indexeurs 2.1 Définitions et comparaisons avec les propriétés 2.1.1 Déclaration 2.1.2 Utilisation 2.1.3 Paramètres 2.1.4 Liaison dynamique abstraction et interface 2.2 Code C# complet compilable rm di Scala - 2006 Livret 3.3 : Le langage C# dans .Net : partie 3 - ( rév. 07.12.2005 ) page 3 1. Les propriétés Les propriétés du langage C# sont très proches de celle du langage Delphi, mais elles sont plus complètes et restent cohérentes avec la notion de membre en C#. 1.1 Définition et déclaration de propriété Définition d'une propriété Une propriété définie dans une classe permet d'accéder à certaines informations contenues dans les objets instanciés à partir de cette classe. Une propriété a la même syntaxe de définition et d'utilisation que celle d'un champ d'objet (elle possède un type de déclaration), mais en fait elle invoque une ou deux méthodes internes pour fonctionner. Les méthodes internes sont déclarées à l'intérieur d'un bloc de définition de la propriété. Déclaration d'une propriété propr1 de type int : public int propr1 { //...... bloc de définition } Un champ n'est qu'un emplacement de stockage dont le contenu peut être consulté (lecture du contenu du champ) et modifié (écriture dans le champ), tandis qu'une propriété associe des actions spécifiques à la lecture ou à l'écriture ainsi que la modification des données que la propriété représente. Livret 3.3 : Le langage C# dans .Net : partie 3 - ( rév. 07.12.2005 ) page 4 1.2 Accesseurs de propriété En C#, une propriété fait systématiquement appel à une ou à deux méthodes internes dont les noms sont les mêmes pour toutes les propriétés afin de fonctionner soit en lecture, soit en écriture. On appelle ces méthodes internes des accesseurs; leur noms sont get et set , ci- dessous un exemple de lecture et d'écriture d'une propriété au moyen d'affectations : Accesseur de lecture de la propriété : Syntaxe : get { return ..... ;} cet accesseur indique que la propriété est en lecture et doit renvoyer un résultat dont le type doit être le même que celui de la propriété. La propriété propr1 ci-dessous est déclarée en lecture seule et renvoie le contenu d'un champ de même type qu'elle : private int champ; public int propr1{ get { return champ ; } } Accesseur d'écriture dans la propriété : Syntaxe : set { ....} cet accesseur indique que la propriété est en écriture et sert à initialiser ou à modifier la propriété. La propriété propr1 ci-dessous est déclarée en écriture seule et stocke une donnée de même type qu'elle dans la variable champ : private int champ; public int propr1{ set { champ = value ; } } Le mot clef value est une sorte de paramètre implicite interne à l'accesseur set, il contient la valeur effective qui est transmise à la propriété lors de l'accès en écriture. rm di Scala - 2006 Livret 3.3 : Le langage C# dans .Net : partie 3 - ( rév. 07.12.2005 ) page 5 D'un manière générale lorsqu'une propriété fonctionne à travers un attribut (du même type que la propriété), l'attribut contient la donnée brute à laquelle la propriété permet d'accéder. Ci-dessous une déclaration d'une propriété en lecture et écriture avec attribut de stockage : private int champ; public int propr1{ get { return champ ; } set { champ = value ; } } Le mécanisme de fonctionnement est figuré ci-après : Dans l'exemple précédent, la propriété accède directement sans modification à la donnée brute stockée dans le champ, mais il est tout à fait possible à une propriété d'accéder à cette donnée en en modifiant sa valeur avant stockage ou après récupération de sa valeur. 1.3 Détail et exemple de fonctionnement d'une propriété L'exemple ci-dessous reprend la propriété propr1 en lecture et écriture du paragraphe précédent et montre comment elle peut modifier la valeur brute de la donnée stockée dans l'attribut " int champ " : private int champ; public int propr1{ get {return champ*10;} set {champ = value + 5 ;} } Utilisons cette propriété en mode écriture à travers une affectation : prop1 = 14 ; Livret 3.3 : Le langage C# dans .Net : partie 3 - ( rév. 07.12.2005 ) page 6 Le mécanisme d'écriture est simulé ci-dessous : La valeur 14 est passée comme paramètre dans la méthode set à la variable implicite value, le calcul value+5 est effectué et le résultat 19 est stocké dans l'attribut champ. Utilisons maintenant notre propriété en mode lecture à travers une affectation : int x = propr1 ; Le mécanisme de lecture est simulé ci-dessous : La valeur brute 19 stockée dans l'attribut champ est récupérée par la propriété qui l'utilise dans la méthode accesseur get en la multipliant par 10, c'est cette valeur modifiée de 190 qui renvoyée par la propriété. rm di Scala - 2006 Livret 3.3 : Le langage C# dans .Net : partie 3 - ( rév. 07.12.2005 ) page 7 Exemple pratique d'utilisation d'une propriété Une propriété servant à fournir automatiquement le prix d'un article en y intégrant la TVA au taux de 19.6% et arrondi à l'unité d'euro supérieur : private Double prixTotal ; private Double tauxTVA = 1.196 ; public Double prix { get { return Math.Round(prixTotal); } set { prixTotal = value * tauxTVA ; } } Ci-dessous le programme console C#Builder exécutable : using System ; namespace ProjPropIndex { class Class { static private Double prixTotal ; static private Double tauxTVA = 1.196 ; static public Double prix { get { return Math.Round ( prixTotal ) ; } set { prixTotal = value * tauxTVA ; } } [STAThread] static void Main ( string [] args ) { Double val = 100 ; System .Console.WriteLine ("Valeur entrée :" + val ); prix = val ; System .Console.WriteLine ("Valeur stockée :" + prixTotal ); val = prix ; System .Console.WriteLine ("valeur arrondie (lue) : " + val ) ; System .Console.ReadLine ( ); } } } Résultats d'exécution : Livret 3.3 : Le langage C# dans .Net : partie 3 - ( rév. 07.12.2005 ) page 8 Explications des actions exécutées : On rentre 100¼ dans la variable prix : Double val = 100 ; prix = val ; Action effectuée : On écrit 100 dans la propriété prix et celle-ci stocke 100*1.196=119.6 dans le champ prixTotal. On exécute l'instruction : val = prix ; Action effectuée : On lit la propriété qui arrondi le champ prixTotal à l'euro supérieur soit : 120€ 1.4 Les propriétés sont de classes ou d'instances Les propriétés, comme les champs peuvent être des propriétés de classes et donc qualifiées par les mots clefs comme static, abstract etc ...Dans l'exemple précédent nous avons qualifié tous les champs et la propriété prix en static afin qu'ils puissent être accessibles à la méthode Main qui est elle-même obligatoirement static. Voici le même exemple utilisant une version avec des propriétés et des champs d'instances et non de classe (non static) : using System ; namespace ProjPropIndex { class clA { private Double prixTotal ; private Double tauxTVA = 1.196 ; public Double prix { get { return Math.Round ( prixTotal ) ; } set { prixTotal = value * tauxTVA ; } } } class Class { [STAThread] static void Main ( string [] args ) { clA Obj = new clA ( ); Double val = 100 ; System .Console.WriteLine ("Valeur entrée :" + val ); rm di Scala - 2006 Livret 3.3 : Le langage C# dans .Net : partie 3 - ( rév. 07.12.2005 ) page 9 Obj.prix = val ; // le champ prixTotal n'est pas accessible car il est privé val = Obj.prix ; System .Console.WriteLine ("valeur arrondie (lue) : " + val ) ; System .Console.ReadLine ( ); } } } Résultats d'exécution : 1.5 Les propriétés peuvent être masquées comme les méthodes Une propriété sans spécificateur particulier de type de liaison uploads/Litterature/ livret-03.pdf

  • 29
  • 0
  • 0
Afficher les détails des licences
Licence et utilisation
Gratuit pour un usage personnel Attribution requise
Partager