[Tutoriel C#] Génériques C#

黄舟
Libérer: 2016-12-24 13:14:43
original
1111 Les gens l'ont consulté

Génériques C#

Les génériques vous permettent de retarder l'écriture de la spécification du type de données d'un élément de programmation dans une classe ou une méthode jusqu'à ce qu'il soit réellement utilisé dans le programme. En d’autres termes, les génériques vous permettent d’écrire une classe ou une méthode pouvant fonctionner avec n’importe quel type de données.

Vous pouvez écrire la spécification d'une classe ou d'une méthode via des paramètres de substitution de types de données. Lorsque le compilateur rencontre un appel de fonction au constructeur ou à la méthode d'une classe, il génère du code pour gérer le type de données spécifié. L'exemple simple suivant vous aidera à comprendre ce concept :

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)
        {
            // 声明一个整型数组
            MyGenericArray<int> intArray = new MyGenericArray<int>(5);
            // 设置值
            for (int c = 0; c < 5; c++)
            {
                intArray.setItem(c, c*5);
            }
            // 获取值
            for (int c = 0; c < 5; c++)
            {
                Console.Write(intArray.getItem(c) + " ");
            }
            Console.WriteLine();
            // 声明一个字符数组
            MyGenericArray<char> charArray = new MyGenericArray<char>(5);
            // 设置值
            for (int c = 0; c < 5; c++)
            {
                charArray.setItem(c, (char)(c+97));
            }
            // 获取值
            for (int c = 0; c < 5; c++)
            {
                Console.Write(charArray.getItem(c) + " ");
            }
            Console.WriteLine();
            Console.ReadKey();
        }
    }
}
Copier après la connexion

Lorsque le code ci-dessus est compilé et exécuté, il produit les résultats suivants :

0 5 10 15 20
a b c d e
Copier après la connexion

Caractéristiques génériques de (générique)

L'utilisation de génériques est une technologie qui améliore les fonctionnalités du programme, en particulier dans les aspects suivants :

Elle vous aide à maximiser la réutilisation du code et à protéger la sécurité des types et à améliorer les performances.

Vous pouvez créer des classes de collection génériques. La bibliothèque de classes .NET Framework inclut de nouvelles classes de collection génériques dans l'espace de noms System.Collections.Generic. Vous pouvez utiliser ces classes de collection génériques à la place des classes de collection dans System.Collections .

Vous pouvez créer vos propres interfaces génériques, classes génériques, méthodes génériques, événements génériques et délégués génériques.

Vous pouvez contraindre une classe générique à accéder aux méthodes d'un type de données spécifique.

Des informations sur les types utilisés dans les types de données génériques peuvent être obtenues au moment de l'exécution en utilisant la réflexion.

Méthode générique

Dans l'exemple ci-dessus, nous avons utilisé une classe générique, et nous pouvons déclarer une méthode générique via des paramètres de type. Le programme suivant illustre ce concept :

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 = &#39;I&#39;;
            d = &#39;V&#39;;

            // 在交换之前显示值
            Console.WriteLine("Int values before calling swap:");
            Console.WriteLine("a = {0}, b = {1}", a, b);
            Console.WriteLine("Char values before calling swap:");
            Console.WriteLine("c = {0}, d = {1}", c, d);

            // 调用 swap
            Swap<int>(ref a, ref b);
            Swap<char>(ref c, ref d);

            // 在交换之后显示值
            Console.WriteLine("Int values after calling swap:");
            Console.WriteLine("a = {0}, b = {1}", a, b);
            Console.WriteLine("Char values after calling swap:");
            Console.WriteLine("c = {0}, d = {1}", c, d);
            Console.ReadKey();
        }
    }
}
Copier après la connexion

Lorsque le code ci-dessus est compilé et exécuté, il produit les résultats suivants :

Int values before calling swap:
a = 10, b = 20
Char values before calling swap:
c = I, d = V
Int values after calling swap:
a = 20, b = 10
Char values after calling swap:
c = V, d = I
Copier après la connexion

Délégué générique

Vous pouvez définir des délégués génériques via des paramètres de type. Par exemple :

delegate T NumberChanger<T>(T n);
Copier après la connexion

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

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)
        {
            // 创建委托实例
            NumberChanger nc1 = new NumberChanger(AddNum);
            NumberChanger nc2 = new NumberChanger(MultNum);
            // 使用委托对象调用方法
            nc1(25);
            Console.WriteLine("Value of Num: {0}", getNum());
            nc2(5);
            Console.WriteLine("Value of Num: {0}", getNum());
            Console.ReadKey();
        }
    }
}
Copier après la connexion

Lorsque le code ci-dessus est compilé et exécuté, il produit les résultats suivants :

Value of Num: 35
Value of Num: 175
Copier après la connexion


Ce qui précède est le contenu du [Tutoriel c#] C# Generic Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois (www.php.cn) !

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal