Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Industrial programming >> Langue C

Les génériques C# expliqués : Code flexible et typé pour tout type de données

Les génériques vous permettent de définir la spécification du type de données des éléments de programmation dans une classe ou une méthode, jusqu'à ce qu'ils soient réellement utilisés dans le programme. En d'autres termes, les génériques vous permettent d'écrire une classe ou une méthode qui peut fonctionner avec n'importe quel type de données.

Vous écrivez les spécifications pour la classe ou la méthode, avec des paramètres de substitution pour les types de données. Lorsque le compilateur rencontre un constructeur pour la classe ou un appel de fonction pour la méthode, il génère le code pour gérer le type de données spécifique. Un exemple simple aidera à comprendre le concept :

Démonstration en direct
using System; 
using System.Collections.Generic; 
namespace GenericApplication { 
    public class MyGenericArray<T> { 
        private T[] array; 
        public MyGenericArray(int size) { 
            array = new T[size + 1]; 
        } 
        public T getItem(int index) { 
            return array[index]; 
        } 
        public void setItem(int index, T value) { 
            array[index] = value; 
        } 
    } 
    class Tester { 
        static void Main(string[] args) { 
            // Déclaration d'un tableau d'entiers 
            MyGenericArray<int> intArray = new MyGenericArray<int>(5); 
            // Définition des valeurs 
            for (int c = 0; c < 5; c++) { 
                intArray.setItem(c, c*5); 
            } 
            // Récupération des valeurs 
            for (int c = 0; c < 5; c++) { 
                Console.Write(intArray.getItem(c) + " "); 
            } 
            Console.WriteLine(); 
            // Déclaration d'un tableau de caractères 
            MyGenericArray<char> charArray = new MyGenericArray<char>(5); 
            // Définition des valeurs 
            for (int c = 0; c < 5; c++) { 
                charArray.setItem(c, (char)(c+97)); 
            } 
            // Récupération des valeurs 
            for (int c = 0; c < 5; c++) { 
                Console.Write(charArray.getItem(c) + " "); 
            } 
            Console.WriteLine(); 
            Console.ReadKey(); 
        } 
    } 
}

Lorsque le code ci-dessus est compilé et exécuté, il produit le résultat suivant :

0 5 10 15 20 a b c d e

Caractéristiques des génériques

Les génériques enrichissent vos programmes de la manière suivante :

Méthodes génériques

Dans l'exemple précédent, nous avons utilisé une classe générique ; nous pouvons déclarer une méthode générique avec un paramètre de type. Le programme suivant illustre le concept :

Démonstration en direct
using System; 
using System.Collections.Generic; 
namespace GenericMethodAppl { 
    class Program { 
        static void Swap<T>(ref T lhs, ref T rhs) { 
            T temp; 
            temp = lhs; 
            lhs = rhs; 
            rhs = temp; 
        } 
        static void Main(string[] args) { 
            int a, b; 
            char c, d; 
            a = 10; 
            b = 20; 
            c = 'I'; 
            d = 'V'; 
            // Affichage des valeurs avant l'échange : 
            Console.WriteLine("Valeurs entières avant l'échange :"); 
            Console.WriteLine("a = {0}, b = {1}", a, b); 
            Console.WriteLine("Valeurs caractères avant l'échange :"); 
            Console.WriteLine("c = {0}, d = {1}", c, d); 
            // Appel de swap 
            Swap<int>(ref a, ref b); 
            Swap<char>(ref c, ref d); 
            // Affichage des valeurs après l'échange : 
            Console.WriteLine("Valeurs entières après l'échange :"); 
            Console.WriteLine("a = {0}, b = {1}", a, b); 
            Console.WriteLine("Valeurs caractères après l'échange :"); 
            Console.WriteLine("c = {0}, d = {1}", c, d); 
            Console.ReadKey(); 
        } 
    } 
}

Lorsque le code ci-dessus est compilé et exécuté, il produit le résultat suivant :

Valeurs entières avant l'échange : 
a = 10, b = 20 
Valeurs caractères avant l'échange : 
c = I, d = V 
Valeurs entières après l'échange : 
a = 20, b = 10 
Valeurs caractères après l'échange : 
c = V, d = I

Délégués génériques

Vous pouvez définir un délégué générique avec des paramètres de type. Par exemple :

delegate T NumberChanger<T>(T n);

L'exemple suivant montre l'utilisation de ce délégué :

Démonstration en direct
using System; 
using System.Collections.Generic; 
delegate T NumberChanger<T>(T n); 
namespace GenericDelegateAppl { 
    class TestDelegate { 
        static int num = 10; 
        public static int AddNum(int p) { 
            num += p; 
            return num; 
        } 
        public static int MultNum(int q) { 
            num *= q; 
            return num; 
        } 
        public static int getNum() { 
            return num; 
        } 
        static void Main(string[] args) { 
            // Création d'instances de délégués 
            NumberChanger<int> nc1 = new NumberChanger<int>(AddNum); 
            NumberChanger<int> nc2 = new NumberChanger<int>(MultNum); 
            // Appel des méthodes via les objets délégués 
            nc1(25); 
            Console.WriteLine("Valeur de Num: {0}", getNum()); 
            nc2(5); 
            Console.WriteLine("Valeur de Num: {0}", getNum()); 
            Console.ReadKey(); 
        } 
    } 
}

Lorsque le code ci-dessus est compilé et exécuté, il produit le résultat suivant :

Valeur de Num: 35 
Valeur de Num: 175

Langue C

  1. C# Hello World — Construire votre première application C#
  2. Comprendre les mots-clés et identificateurs C# : règles, listes et bonnes pratiques
  3. Maîtriser les variables C# et types de données primitifs : guide complet
  4. Opérateurs C# — Guide complet des opérateurs en C#
  5. Maîtriser les opérateurs bit à bit et de décalage en C# : Guide complet
  6. Fondamentaux C# : Entrées et sorties essentielles
  7. Expressions, instructions et blocs C# : Guide complet avec exemples pratiques
  8. Maîtriser les commentaires C# : Types, bonnes pratiques et documentation XML
  9. Maîtriser l'instruction Switch C# : Syntaxe, exemples et bonnes pratiques