Latest web development tutorials

C # Generics (Generic)

Generico (Generic) permette di ritardare la preparazione del tipo di dati degli elementi di classe o di programmazione metodo della specifica, fino a quando è il momento di utilizzare effettivamente il programma.In altre parole, permette di scrivere una classe generica o di un metodo che può funzionare con qualsiasi tipo di dati.

È possibile scrivere la classe specifica o il metodo sostituendo i tipi di dati dei parametri. Quando la funzione viene chiamata un costruttore o un metodo compilatore incontra una classe che genererà il codice per gestire il tipo di dati specificato. Il seguente esempio semplice vi aiuterà a capire questo concetto:

using System;
utilizzando System.Collections.Generic;

namespace GenericApplication
{
    public class MyGenericArray <T>
    {
        T [] array privato;
        MyGenericArray pubblico (int size)
        {
            Array = new T [size + 1];
        }
        pubblico T getItem (int index)
        {
            tornare array [index];
        }
        setItem public void (int index, valore T)
        {
            array [index] = valore;
        }
    }
           
    classe Tester
    {
        static void Main (string [] args)
        {
            // Dichiara un array intero MyGenericArray <int> intArray = new MyGenericArray <int> (5);
            // Imposta il valore per (int c = 0; c <5; c ++)
            {
                intArray.setItem (c, c * 5);
            }
            // Ottenere il valore per (int c = 0; c <5; c ++)
            {
                Console.Write (intArray.getItem (c) + "");
            }
            Console.WriteLine ();
            // Dichiara un array di caratteri MyGenericArray <char> charArray = new MyGenericArray <char> (5);
            // Imposta il valore per (int c = 0; c <5; c ++)
            {
                charArray.setItem (c, (char) (c + 97));
            }
            // Ottenere il valore per (int c = 0; c <5; c ++)
            {
                Console.Write (charArray.getItem (c) + "");
            }
            Console.WriteLine ();
            Console.ReadKey ();
        }
    }
}

Quando il codice di cui sopra è compilato ed eseguito, produce i seguenti risultati:

05101520
ABCDE

Generici (generico) caratteristiche

L'uso dei farmaci generici è un programma per migliorare le capacità tecniche, in particolare per i seguenti aspetti:

  • Ti aiuta a massimizzare il riutilizzo del codice, tipo di protezione della sicurezza e migliorando le prestazioni.
  • È possibile creare una classe insieme generico. libreria di classi .NET Framework contiene diverse nuove classi di raccolta generica nello spazio dei nomiSystem.Collections.Generic.È possibile utilizzare queste classi di insiemi generici invece le classi di raccoltaSystem.Collections.
  • È possibile creare interfacce generiche, classi generiche, metodo generico eventi generici e delegato generico.
  • È possibile vincolare la classe generica per accedere a tipi di dati specifici.
  • Informazioni sui tipi di dati generici utilizzati nel tipo di informazioni possono essere ottenute in fase di esecuzione utilizzando riflessione.

metodo generico (Generic)

Nell'esempio precedente, abbiamo utilizzato la classe generica, possiamo dichiarare un generico parametri di tipo metodo. Il seguente programma illustra questo concetto:

using System;
utilizzando System.Collections.Generic;

GenericMethodAppl namespace
{
    Programma di classe
    {
        static void swap <T> (ref T sx, dx ref T)
        {
            T temperatura;
            temp = ss;
            lhs = sd;
            sd = temperatura;
        }
        static void Main (string [] args)
        {
            int a, b;
            char c, d;
            a = 10;
            b = 20;
            c = 'I';
            d = 'V';

            // Display prima della Console.WriteLine valore di scambio ( "valori Int prima di chiamare swap:");
            Console.WriteLine ( "a = {0}, b = {1}", a, b);
            Console.WriteLine ( "valori Char prima di chiamare swap:");
            Console.WriteLine ( "c = {0}, d = {1}", c, d);

            // Scambio di chiamata
            Swap <int> (rif, ref b);
            Swap <char> (ref C, ref d);

            // Dopo uno scambio di Console.WriteLine valore di visualizzazione ( "valori Int dopo aver chiamato swap:");
            Console.WriteLine ( "a = {0}, b = {1}", a, b);
            Console.WriteLine ( "valori Char dopo aver chiamato swap:");
            Console.WriteLine ( "c = {0}, d = {1}", c, d);
            Console.ReadKey ();
        }
    }
}

Quando il codice di cui sopra è compilato ed eseguito, produce i seguenti risultati:

valori int prima di swap di chiamare:
a = 10, b = 20
I valori char prima di swap di chiamare:
c = I, d = V
valori int Dopo aver chiamato swap:
a = 20, b = 10
I valori char Dopo aver chiamato swap:
c = V, d = I

Generico (Generic) commissionato

È possibile definire tramite parametri di tipo delegato generici. Ad esempio:

delegato T NumberChanger <T> (T n);

L'esempio seguente dimostra l'uso di commissione:

using System;
utilizzando System.Collections.Generic;

delegato T NumberChanger <T> (T n);
GenericDelegateAppl namespace
{
    classe TestDelegate
    {
        int num statica = 10;
        public static int AddNum (int p)
        {
            num + = p;
            tornare num;
        }

        public static int MultNum (int q)
        {
            num * = q;
            tornare num;
        }
        int public static getNum ()
        {
            tornare num;
        }

        static void Main (string [] args)
        {
            // Crea un'istanza delegato NumberChanger <int> NC1 = new NumberChanger <int> (AddNum);
            NumberChanger <int> NC2 = new NumberChanger <int> (MultNum);
            // Chiamare il metodo mediante un NC1 oggetto delegato (25);
            Console.WriteLine ( "Valore di Num: {0}", getNum ());
            NC2 (5);
            Console.WriteLine ( "Valore di Num: {0}", getNum ());
            Console.ReadKey ();
        }
    }
}

Quando il codice di cui sopra è compilato ed eseguito, produce i seguenti risultati:

Valore di Num: 35
Valore di Num: 175