Heim  >  Artikel  >  Backend-Entwicklung  >  [C#-Tutorial] C#-Generika

[C#-Tutorial] C#-Generika

黄舟
黄舟Original
2016-12-24 13:14:431060Durchsuche

C#-Generika

Generika ermöglichen es Ihnen, das Schreiben der Spezifikation des Datentyps eines Programmierelements in einer Klasse oder Methode aufzuschieben, bis es tatsächlich im Programm verwendet wird. Mit anderen Worten: Mit Generika können Sie eine Klasse oder Methode schreiben, die mit jedem Datentyp arbeiten kann.

Sie können die Spezifikation einer Klasse oder Methode durch Substitutionsparameter von Datentypen schreiben. Wenn der Compiler auf einen Funktionsaufruf an den Konstruktor oder die Methode einer Klasse stößt, generiert er Code zur Verarbeitung des angegebenen Datentyps. Das folgende einfache Beispiel hilft Ihnen, dieses Konzept zu verstehen:

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();
        }
    }
}

Wenn der obige Code kompiliert und ausgeführt wird, erzeugt er die folgenden Ergebnisse:

0 5 10 15 20
a b c d e

Generics Features of (Generic)

Die Verwendung von Generika ist eine Technologie, die die Programmfunktionalität verbessert, insbesondere in den folgenden Aspekten:

Sie hilft Ihnen, die Wiederverwendung von Code zu maximieren, die Typensicherheit zu schützen und die Leistung zu verbessern.

Sie können generische Sammlungsklassen erstellen. Die .NET Framework-Klassenbibliothek enthält neue generische Sammlungsklassen im System.Collections.Generic-Namespace. Sie können diese generischen Auflistungsklassen anstelle der Auflistungsklassen in System.Collections verwenden.

Sie können Ihre eigenen generischen Schnittstellen, generischen Klassen, generischen Methoden, generischen Ereignisse und generischen Delegaten erstellen.

Sie können eine generische Klasse auf den Zugriff auf Methoden eines bestimmten Datentyps beschränken.

Informationen über die in generischen Datentypen verwendeten Typen können zur Laufzeit mithilfe von Reflektion abgerufen werden.

Generische Methode

Im obigen Beispiel haben wir eine generische Klasse verwendet und können eine generische Methode über Typparameter deklarieren. Das folgende Programm veranschaulicht dieses Konzept:

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();
        }
    }
}

Wenn der obige Code kompiliert und ausgeführt wird, erzeugt er die folgenden Ergebnisse:

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

Generischer Delegat

Das können Sie Definieren Sie generische Delegaten über Typparameter. Zum Beispiel:

delegate T NumberChanger<T>(T n);

Das folgende Beispiel veranschaulicht die Verwendung von Delegaten:

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();
        }
    }
}

Wenn der obige Code kompiliert und ausgeführt wird, erzeugt er die folgenden Ergebnisse:

Value of Num: 35
Value of Num: 175


Das Obige ist der Inhalt von [c# Tutorial] C# Generic. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php.cn)!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn