Megosztás a következőn keresztül:


Általános osztályok és metódusok

A Generics bevezeti a típusparaméterek fogalmát a .NET-be. Az általánosak lehetővé teszik olyan osztályok és metódusok tervezését, amelyek egy vagy több típusparaméter specifikációját késleltetik, amíg az osztályt vagy metódust nem használja a kódban. Például egy általános típusparaméter Thasználatával egyetlen osztályt írhat, amelyet más ügyfélkódok használhatnak anélkül, hogy a futtatókörnyezeti leadások vagy a boxing műveletek költségei vagy kockázata merült volna fel, ahogy az itt látható:

// Declare the generic class.
public class GenericList<T>
{
    public void Add(T item) { }
}

public class ExampleClass { }

class TestGenericList
{
    static void Main()
    {
        // Create a list of type int.
        GenericList<int> list1 = new();
        list1.Add(1);

        // Create a list of type string.
        GenericList<string> list2 = new();
        list2.Add("");

        // Create a list of type ExampleClass.
        GenericList<ExampleClass> list3 = new();
        list3.Add(new ExampleClass());
    }
}

Az általános osztályok és módszerek úgy kombinálják az újrafelhasználhatóságot, a típusbiztonságot és a hatékonyságot, hogy nemgeneratív társaik nem tudják. Az általános típusparamétereket a rendszer a fordítás során a típusargumentumokra cseréli. Az előző példában a fordító a következőre cseréli a következőt T int: . Az általános generikus elemeket leggyakrabban a gyűjteményekhez és a rajtuk működő metódusokhoz használják. A System.Collections.Generic névtér több általános alapú gyűjteményosztályt tartalmaz. A nemgenerikus gyűjtemények, például ArrayList nem ajánlottak, és csak kompatibilitási célból vannak fenntartva. További információ: Generics in .NET.

Egyéni általános típusokat és metódusokat is létrehozhat, hogy saját, általánosított megoldásokat és tervezési mintákat biztosítson, amelyek típusbiztosak és hatékonyak. Az alábbi példakód egy egyszerű, általános csatolt listaosztályt mutat be bemutató célokra. (A legtöbb esetben a List<T> .NET által biztosított osztályt kell használnia a saját létrehozása helyett.) A típusparamétert T több helyen használják, ahol általában egy konkrét típust használnak a listában tárolt elem típusának jelzésére:

  • Metódusparaméter típusaként a AddHead metódusban.
  • A beágyazott Node osztály tulajdonságának Data visszatérési típusaként.
  • A beágyazott osztály magántagjának data típusaként.

T a beágyazott Node osztály számára érhető el. Amikor GenericList<T> egy konkrét típussal, például GenericList<int>egy konkrét típussal példányosítjuk, az egyes előfordulások T helyébe inta következő lép: .

// Type parameter T in angle brackets.
public class GenericList<T>
{
    // The nested class is also generic, and
    // holds a data item of type T.
    private class Node(T t)
    {
        // T as property type.
        public T Data { get; set; } = t;

        public Node? Next { get; set; }
    }

    // First item in the linked list
    private Node? head;

    // T as parameter type.
    public void AddHead(T t)
    {
        Node n = new(t);
        n.Next = head;
        head = n;
    }

    // T in method return type.
    public IEnumerator<T> GetEnumerator()
    {
        Node? current = head;

        while (current is not null)
        {
            yield return current.Data;
            current = current.Next;
        }
    }
}

Az alábbi példakód bemutatja, hogyan használja az ügyfélkód az általános GenericList<T> osztályt az egész számok listájának létrehozásához. Ha módosítja a típusargumentumot, a következő kód sztringlistákat hoz létre, vagy bármilyen más egyéni típust:

// A generic list of int.
GenericList<int> list = new();

// Add ten int values.
for (int x = 0; x < 10; x++)
{
    list.AddHead(x);
}

// Write them to the console.
foreach (int i in list)
{
    Console.WriteLine(i);
}

Console.WriteLine("Done");

Feljegyzés

Az általános típusok nem korlátozódnak az osztályokra. Az előző példák típusokat használnak class , de általános interface és struct típusokat is definiálhat, beleértve a típusokat is record .

Általános szolgáltatások áttekintése

  • Általános típusokkal maximalizálhatja a kód újrafelhasználását, a típusbiztonságot és a teljesítményt.
  • Az általános eszközök leggyakoribb használata a gyűjteményosztályok létrehozása.
  • A .NET-osztálytár több általános gyűjteményosztályt tartalmaz a System.Collections.Generic névtérben. Az általános gyűjteményeket lehetőség szerint az olyan osztályok helyett kell használni, mint ArrayList például a System.Collections névtérben.
  • Létrehozhat saját általános felületeket, osztályokat, metódusokat, eseményeket és meghatalmazottakat.
  • Az általános osztályok korlátozhatók az egyes adattípusok metódusaihoz való hozzáférés engedélyezéséhez.
  • Az általános adattípusban használt típusokkal kapcsolatos információkat futtatáskor, tükröződés használatával szerezheti be.

C# nyelvspecifikáció

További információkért lásd a C# nyelvi specifikációját.

Lásd még