Akademi C# · Pelajaran

Kelas Generik

Jenis bekas yang boleh diguna semula.

Pelajaran 2 daripada 413 langkah

Kelas Generik ialah pelajaran Akademi C# percuma di CoddyKit. Ini ialah pelajaran 2 daripada 4. Anda boleh membaca keseluruhan pelajaran di bawah secara percuma — kemudian berlatih secara praktikal dalam pelayar menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Akademi C#, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Akademi C# merangkumi sejumlah 4 pelajaran.

Apakah Kelas Generik?

Kelas generik mengisytiharkan satu atau lebih parameter jenis dalam tanda kurung sudut selepas nama kelas. Parameter tersebut boleh digunakan untuk medan, sifat, tandatangan kaedah dan jenis pulangan di seluruh kelas.

Hal ini membolehkan Anda menulis satu bekas atau perkhidmatan yang berfungsi dengan pelbagai jenis unsur sambil mengekalkan penaipan kukuh.

class Box<T>
{
    public T Value { get; set; }
}

Membina Kelas Generik

Untuk mencipta satu tika, Anda memberikan argumen jenis konkrit. Box<int> dan Box<string> ialah jenis terbina yang berbeza.

Setiap jenis terbina berkelakuan seolah-olah T-nya digantikan dengan jenis sebenar di semua tempat.

using System;

class Box<T> { public T Value { get; set; } }

class Program
{
    static void Main()
    {
        var b = new Box<int> { Value = 7 };
        Console.WriteLine(b.Value);
    }
}

Medan dan Sifat Generik

Parameter jenis boleh berfungsi sebagai jenis medan dan sifat. Tindanan, baris gilir atau tembolok lazimnya menyimpan datanya dalam tatasusunan atau senarai T.

Penyimpanan dalaman kekal selamat dari segi jenis tanpa penukaran jenis.

class Pair<T>
{
    public T First;
    public T Second;
}

Berbilang Parameter Jenis

Sebuah kelas boleh menerima beberapa parameter jenis. Jenis pasangan kunci/nilai atau jenis bergaya kamus lazimnya menggunakan dua parameter.

Nama yang deskriptif seperti TKey dan TValue meningkatkan kebolehbacaan apabila terdapat lebih daripada satu parameter.

class Entry<TKey, TValue>
{
    public TKey Key { get; set; }
    public TValue Value { get; set; }
}

Tindanan Generik Ringkas

Berikut ialah tindanan generik kecil yang dibina berasaskan List<T>. Push menambah pada hujung, manakala Pop membuang dari hujung.

Kelas yang sama boleh digunakan untuk nilai int, rentetan atau sebarang jenis rujukan atau nilai.

using System;
using System.Collections.Generic;

class MyStack<T>
{
    private readonly List<T> items = new();
    public void Push(T item) => items.Add(item);
    public T Pop()
    {
        var i = items[^1];
        items.RemoveAt(items.Count - 1);
        return i;
    }
}

class Program
{
    static void Main()
    {
        var s = new MyStack<string>();
        s.Push("a");
        s.Push("b");
        Console.WriteLine(s.Pop());
    }
}

Kaedah Generik dalam Kelas Generik

Kelas generik juga boleh mengisytiharkan parameter jenis tambahan pada kaedah tertentu. Parameter pada aras kaedah ini tidak bergantung pada parameter pada aras kelas.

Hal ini menambah keanjalan, contohnya dengan menukar jenis yang disimpan kepada jenis lain.

class Box<T>
{
    public T Value;
    public TOut Map<TOut>(Func<T, TOut> f) => f(Value);
}

Kekangan pada Kelas

Seperti kaedah, kelas generik boleh mengehadkan parameter jenisnya dengan where. Sesuatu kekangan terpakai pada setiap ahli yang menggunakan parameter tersebut.

Di bawah, where T : class membenarkan penetapan null dan perbandingan rujukan.

class Repository<T> where T : class
{
    private T current;
    public bool IsEmpty => current is null;
}

Ahli Statik adalah Mengikut Jenis

Setiap jenis generik terbina mendapat salinan medan statiknya sendiri. Counter<int> dan Counter<string> menjejak kiraan yang berasingan.

Ini ialah perbezaan yang halus tetapi penting berbanding kelas bukan generik.

class Counter<T>
{
    public static int Count;
}

Nilai Lalai dalam Kelas Generik

Dalam kelas generik, Anda sering memerlukan nilai permulaan untuk medan berjenis T. Gunakan default(T) atau default yang lebih ringkas apabila jenisnya diketahui daripada konteks.

Ungkapan ini menghasilkan null bagi jenis rujukan dan nilai sifar bagi jenis nilai.

class Slot<T>
{
    public T Value = default!;
    public bool HasValue { get; private set; }
}

Mewarisi daripada Kelas Generik

Anda boleh memperoleh kelas daripada kelas asas generik. Subkelas boleh menetapkan argumen jenis atau kekal generik.

Menetapkan argumen mengkhususkan kelas asas, manakala kekal generik meneruskan parameter ke atas.

class Box<T> { public T Value; }

class IntBox : Box<int> { }

class NamedBox<T> : Box<T> { public string Name; }

Generik dan Koleksi Terbina dalam

Pustaka asas .NET dipenuhi kelas generik: List<T>, Dictionary<TKey, TValue> dan Queue<T>. Kelas-kelas ini ialah manfaat harian daripada reka bentuk kelas generik.

Menulis jenis generik sendiri membolehkan Anda mengembangkan gaya yang selamat dan boleh digunakan semula itu.

using System.Collections.Generic;

var scores = new Dictionary<string, int>();
scores["ada"] = 95;

Semakan Pantas

Uji pemahaman Anda tentang kelas generik.

Imbas Kembali

Kelas generik mengisytiharkan parameter jenis selepas nama kelas dan menggunakannya untuk medan, sifat dan kaedah. Anda membinanya dengan argumen jenis konkrit, lalu mencipta jenis yang berbeza.

Kelas ini boleh menambah parameter jenis pada aras kaedah, membawa kekangan where, diwarisi dan menyimpan keadaan statik mengikut jenis. Koleksi terbina dalam ialah contoh utamanya.

Percuma untuk bermula

Pelajari C# dengan tutor kecerdasan buatan — percuma

Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.

Kursus
93
Pelajaran
346

Soalan Lazim

Adakah pelajaran “Kelas Generik” percuma?

Ya — teks penuh “Kelas Generik” boleh dibaca secara percuma di web ini. Untuk berlatih secara interaktif menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7, serta membuka kunci baki kursus Akademi C#, tingkat taraf kepada CoddyKit PRO. Kursus Akademi C# merangkumi sejumlah 4 pelajaran.

Apakah yang akan saya pelajari dalam “Kelas Generik”?

Jenis bekas yang boleh diguna semula. Anda berlatih Akademi C# menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.

Adakah saya memerlukan pengalaman untuk memulakan Akademi C#?

Tiada pengalaman terdahulu diperlukan. Pembelajaran Akademi C# di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 2 daripada 4.

Berapa lamakah pelajaran “Kelas Generik” diambil?

Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.

Bolehkah saya menulis dan menjalankan kod dalam pelajaran Akademi C# ini?

Ya. Setiap pelajaran Akademi C# menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.

Semua pelajaran dalam kursus ini

  1. Kaedah Generik
  2. Kelas Generik
  3. Kekangan where
  4. Antara Muka Generik
← Kembali ke Akademi C#