Kelas Generik
Tipe wadah yang dapat digunakan kembali.
Kelas Generik adalah pelajaran C# Academy gratis di CoddyKit. Ini adalah pelajaran 2 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar C# Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus C# Academy mencakup 4 pelajaran total.
Apa Itu Kelas Generik?
Kelas generik mendeklarasikan satu atau beberapa parameter tipe di antara tanda kurung sudut setelah nama kelas. Parameter tersebut dapat digunakan untuk bidang, properti, tanda tangan metode, dan tipe pengembalian di seluruh kelas.
Dengan begitu, Anda dapat menulis satu wadah atau layanan yang bekerja untuk berbagai tipe elemen sekaligus tetap memiliki tipe yang kuat.
class Box<T>
{
public T Value { get; set; }
}Membuat Kelas Generik
Untuk membuat sebuah instans, berikan argumen tipe konkret. Box<int> dan Box<string> adalah tipe hasil konstruksi yang berbeda.
Setiap tipe hasil konstruksi berperilaku seolah-olah T-nya diganti dengan tipe sebenarnya 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);
}
}Bidang dan Properti Generik
Parameter tipe dapat digunakan sebagai tipe bidang dan properti. Tumpukan, antrean, atau tembolok sering menyimpan datanya dalam larik atau daftar T.
Penyimpanan internal tetap aman secara tipe tanpa konversi tipe.
class Pair<T>
{
public T First;
public T Second;
}Beberapa Parameter Tipe
Sebuah kelas dapat menggunakan beberapa parameter tipe. Tipe pasangan kunci/nilai atau tipe bergaya kamus biasanya menggunakan dua parameter.
Nama yang deskriptif, seperti TKey dan TValue, meningkatkan keterbacaan jika terdapat lebih dari satu parameter.
class Entry<TKey, TValue>
{
public TKey Key { get; set; }
public TValue Value { get; set; }
}Tumpukan Generik Sederhana
Berikut adalah tumpukan generik kecil yang dibangun di atas List<T>. Push menambahkan elemen ke akhir, sedangkan Pop menghapus elemen dari akhir.
Kelas yang sama dapat digunakan untuk nilai int, teks, atau tipe referensi maupun tipe nilai apa pun.
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());
}
}Metode Generik di Dalam Kelas Generik
Kelas generik juga dapat mendeklarasikan parameter tipe tambahan pada metode tertentu. Parameter tingkat metode tersebut tidak bergantung pada parameter tingkat kelas.
Hal ini menambah fleksibilitas, misalnya untuk mengubah tipe yang disimpan menjadi tipe lain.
class Box<T>
{
public T Value;
public TOut Map<TOut>(Func<T, TOut> f) => f(Value);
}Batasan pada Kelas
Seperti metode, kelas generik dapat membatasi parameter tipenya dengan where. Batasan berlaku untuk setiap anggota yang menggunakan parameter tersebut.
Di bawah ini, where T : class memungkinkan penetapan null dan perbandingan referensi.
class Repository<T> where T : class
{
private T current;
public bool IsEmpty => current is null;
}Anggota Statis Bersifat Per Tipe
Setiap tipe generik hasil konstruksi mendapatkan salinan bidang statisnya sendiri. Counter<int> dan Counter<string> mencatat jumlah yang terpisah.
Ini merupakan perbedaan yang halus, tetapi penting, dari kelas non-generik.
class Counter<T>
{
public static int Count;
}Nilai Bawaan dalam Kelas Generik
Di dalam kelas generik, Anda sering memerlukan nilai awal untuk bidang bertipe T. Gunakan default(T) atau bentuk singkat default jika tipenya sudah diketahui dari konteks.
Hasilnya adalah null untuk tipe referensi dan nilai nol untuk tipe nilai.
class Slot<T>
{
public T Value = default!;
public bool HasValue { get; private set; }
}Mewarisi dari Kelas Generik
Anda dapat menurunkan kelas dari kelas dasar generik. Subkelas dapat menetapkan argumen tipe atau tetap generik.
Menetapkan argumen akan mengkhususkan kelas dasar, sedangkan tetap generik akan meneruskan parameter tersebut ke tingkat di atasnya.
class Box<T> { public T Value; }
class IntBox : Box<int> { }
class NamedBox<T> : Box<T> { public string Name; }Generik dan Koleksi Bawaan
Pustaka dasar .NET dipenuhi kelas generik: List<T>, Dictionary<TKey, TValue>, dan Queue<T>. Semua itu adalah manfaat nyata dari perancangan kelas generik.
Menulis tipe generik sendiri memungkinkan Anda memperluas gaya yang aman dan dapat digunakan kembali tersebut.
using System.Collections.Generic;
var scores = new Dictionary<string, int>();
scores["ada"] = 95;Uji Singkat
Uji pemahaman Anda tentang kelas generik.
Ringkasan
Kelas generik mendeklarasikan parameter tipe setelah nama kelas dan menggunakannya untuk bidang, properti, serta metode. Anda membuatnya dengan argumen tipe konkret sehingga menghasilkan tipe-tipe yang berbeda.
Kelas tersebut dapat menambahkan parameter tipe tingkat metode, memiliki batasan where, diwariskan, dan menyimpan keadaan statis per tipe. Koleksi bawaan adalah contoh utamanya.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Kelas Generik” gratis?
Ya — teks lengkap “Kelas Generik” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus C# Academy, upgrade ke CoddyKit PRO. Kursus C# Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Kelas Generik”?
Tipe wadah yang dapat digunakan kembali. Kamu berlatih C# Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai C# Academy?
Tidak diperlukan pengalaman sebelumnya. C# Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 4.
Berapa lama pelajaran “Kelas Generik” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran C# Academy ini?
Ya. Setiap pelajaran C# Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Metode Generik
- Kelas Generik
- Batasan where
- Antarmuka Generik