Latest web development tutorials

C # rodzajowych (Generic)

Generic (Generic) pozwala opóźnić przygotowanie typu danych klasy lub metody programowania elementów specyfikacji, aż nadszedł czas, aby faktycznie korzystać z programu.Innymi słowy, pozwala na pisanie rodzajowe klasy lub metody, która może pracować z dowolnym typem danych.

Możesz napisać klasę specyfikacji lub metodę zastępując typy danych parametrów. Po wywołaniu funkcji konstruktora lub metody kompilator napotka klasę, która będzie generować kod do obsługi określonego typu danych. Poniższy prosty przykład pomoże zrozumieć tę koncepcję:

using System;
stosując System.Collections.Generic;

nazw GenericApplication
{
    public class MyGenericArray <T>
    {
        private T [] tablica;
        MyGenericArray publicznych (int size)
        {
            tablica = new T [size + 1];
        }
        publicznego T GetItem (int index)
        {
            powrót tablica [indeks];
        }
        public void setItem (int index, wartość T)
        {
            tablica [indeks] = wartość;
        }
    }
           
    Klasa Tester
    {
        static void Main (string [] args)
        {
            // Zadeklaruj tablicę całkowitą MyGenericArray <int> intArray = new MyGenericArray <int> (5);
            // Ustaw wartość for (int c = 0; c <5; c ++)
            {
                intArray.setItem (c, c * 5);
            }
            // Pobierz wartość (int c = 0; c <5; c ++)
            {
                Console.Write (intArray.getItem (c) + "");
            }
            Console.WriteLine ();
            // Zadeklaruj tablicę znaków MyGenericArray <char> charArray = new MyGenericArray <char> (5);
            // Ustaw wartość for (int c = 0; c <5; c ++)
            {
                charArray.setItem (c, (znaków) (C + 97));
            }
            // Pobierz wartość (int c = 0; c <5; c ++)
            {
                Console.Write (charArray.getItem (c) + "");
            }
            Console.WriteLine ();
            Console.ReadKey ();
        }
    }
}

Gdy powyższy kod jest kompilowany i wykonany, że daje następujące wyniki:

05101520
abcde

Generic (ogólne) funkcje

Stosowanie leków generycznych jest programem, w celu zwiększenia możliwości technicznych, w szczególności w następujących aspektach:

  • To pomaga zmaksymalizować ponowne wykorzystanie kodu, rodzaj ochrony bezpieczeństwa i poprawy wydajności.
  • Można utworzyć rodzajowe klas kolekcji. NET Framework klasy zawiera kilka nowych klas kolekcji generycznych w obszarze nazwSystem.Collections.Generic.Można korzystać z tych klas kolekcji generycznych zamiast klas kolekcjiSystem.Collections.
  • Można tworzyć własne interfejsy generyczne, klas generycznych metoda rodzajowa ogólne wydarzenia i rodzajowego delegata.
  • Można ograniczyć klasy rodzajowy dostęp do określonych typów danych.
  • O ogólne typy danych stosowane w rodzaju informacje można uzyskać w czasie wykonywania za pomocą refleksji.

Metoda ogólna (Generic)

W powyższym przykładzie użyliśmy klasy rodzajowe, możemy zadeklarować ogólne parametry typu metody. Następujący program ilustruje tę koncepcję:

using System;
stosując System.Collections.Generic;

GenericMethodAppl przestrzeni nazw
{
    Program klasy
    {
        void swap <T> (T ref LHS, ref T prawa oś)
        {
            T temp;
            temp = lewa;
            lewa = prawa oś;
            prawa oś = temp;
        }
        static void Main (string [] args)
        {
            int a, b;
            char c, d;
            a = 10;
            B = 20;
            c = "ja";
            D = 'V';

            // Wyświetlenie przed Console.WriteLine wartości wymiennej ( "Wartości Int przed wywołaniem wymiany:");
            Console.WriteLine ( "a = {0}, B = {1}", a, b);
            Console.WriteLine ( "Wartości Char przed wywołaniem zamianę:");
            Console.WriteLine ( "C = {0}, d = {1}", c, d);

            // Zamiana połączeń
            Zamień <int> (ref a, ref b);
            Zamień <char> (ref c ref d);

            // Po wymianie Console.WriteLine ( "wyświetlacz wartości wartości Int Po wywołaniu zamianę:");
            Console.WriteLine ( "a = {0}, B = {1}", a, b);
            Console.WriteLine ( "Wartości Char po wywołaniu zamianę:");
            Console.WriteLine ( "C = {0}, d = {1}", c, d);
            Console.ReadKey ();
        }
    }
}

Gdy powyższy kod jest kompilowany i wykonany, że daje następujące wyniki:

Wartości Int przed wywołaniem wymiany:
a = 10 b = 20
Wartości Char przed wywołaniem wymiany:
c = I, D = V
Wartości Int Po wywołaniu wymiany:
a = 20 b = 10
Wartości Char po wywołaniu wymiany:
c = V, d = l

Generic (Generic) zleciła

Można zdefiniować za pomocą parametrów typu delegata generycznych. Na przykład:

Delegat T NumberChanger <T> (T n);

Poniższy przykład demonstruje użycie komisji:

using System;
stosując System.Collections.Generic;

Delegat T NumberChanger <T> (T n);
GenericDelegateAppl przestrzeni nazw
{
    Klasa TestDelegate
    {
        static int num = 10;
        public static int AddNum (int p)
        {
            num + = p;
            powrót num;
        }

        public static int MultNum (int q)
        {
            num = q *;
            powrót num;
        }
        public static int getNum ()
        {
            powrót num;
        }

        static void Main (string [] args)
        {
            // Tworzenie instancji delegata NumberChanger <int> NC1 = new NumberChanger <int> (AddNum);
            NumberChanger <int> NC2 = new NumberChanger <int> (MultNum);
            // Wywołanie metody przy użyciu NC1 obiektu delegata (25);
            Console.WriteLine ( "Wartość Num: {0}", getNum ());
            NC2 (5);
            Console.WriteLine ( "Wartość Num: {0}", getNum ());
            Console.ReadKey ();
        }
    }
}

Gdy powyższy kod jest kompilowany i wykonany, że daje następujące wyniki:

Wartość Num: 35
Wartość Num: 175