C# Academy · Pelajaran

Antarmuka Generik

Abstraksikan berbagai tipe.

Pelajaran 4 dari 413 langkah

Antarmuka Generik adalah pelajaran C# Academy gratis di CoddyKit. Ini adalah pelajaran 4 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 Antarmuka Generik?

Antarmuka generik mendeklarasikan parameter tipe di antara tanda kurung sudut setelah namanya. Implementasinya memilih tipe konkret, lalu kontrak antarmuka menyesuaikan diri.

Pustaka .NET menggunakannya di berbagai tempat, misalnya IEnumerable<T> dan IComparable<T>.

interface IRepository<T>
{
    void Add(T item);
    T Get(int id);
}

Menerapkan Antarmuka Generik

Sebuah kelas dapat menerapkan antarmuka generik dengan memberikan argumen tipe konkret. Tanda tangan metode kemudian menggunakan tipe sebenarnya tersebut.

Hasilnya adalah kontrak yang aman secara tipe dan dapat digunakan kembali tanpa konversi tipe.

using System.Collections.Generic;

class IntStore : IRepository<int>
{
    private readonly List<int> data = new();
    public void Add(int item) => data.Add(item);
    public int Get(int id) => data[id];
}

interface IRepository<T>
{
    void Add(T item);
    T Get(int id);
}

Implementasi Tetap Generik

Sebuah kelas dapat menerapkan antarmuka generik sekaligus tetap generik, dengan meneruskan parameter tipenya sendiri ke antarmuka tersebut.

Hal ini membuat implementasi dapat digunakan kembali untuk tipe elemen apa pun.

using System.Collections.Generic;

class Store<T> : IRepository<T>
{
    private readonly List<T> data = new();
    public void Add(T item) => data.Add(item);
    public T Get(int id) => data[id];
}

interface IRepository<T> { void Add(T item); T Get(int id); }

IComparable<T> dalam Praktik

IComparable<T> adalah antarmuka generik bawaan. Dengan menerapkannya, tipe Anda dapat menentukan cara pengurutan instansnya sehingga pengurutan dapat dilakukan.

Metode CompareTo mengembalikan nilai negatif, nol, atau positif.

class Money : IComparable<Money>
{
    public int Cents;
    public int CompareTo(Money? other)
        => Cents.CompareTo(other?.Cents ?? 0);
}

Menerapkan IEnumerable<T>

IEnumerable<T> adalah inti LINQ dan foreach. Tipe yang menerapkannya dapat diiterasi. Sering kali, Anda mendelegasikan tugas tersebut kepada iterator koleksi bagian dalam.

Metode iterator dengan yield return memudahkan hal ini.

using System.Collections;
using System.Collections.Generic;

class Bag<T> : IEnumerable<T>
{
    private readonly List<T> items = new();
    public void Add(T x) => items.Add(x);
    public IEnumerator<T> GetEnumerator() => items.GetEnumerator();
    IEnumerator IEnumerable.GetEnumerator() => GetEnumerator();
}

Antarmuka Generik yang Dapat Dijalankan

Program lengkap ini mendefinisikan IPrinter<T> generik dan menerapkannya untuk teks, lalu menggunakannya.

Antarmuka tersebut menjamin adanya metode Print, apa pun tipe konkretnya.

using System;

interface IPrinter<T> { void Print(T value); }

class ConsolePrinter<T> : IPrinter<T>
{
    public void Print(T value) => Console.WriteLine(value);
}

class Program
{
    static void Main()
    {
        IPrinter<string> p = new ConsolePrinter<string>();
        p.Print("hello generics");
    }
}

Kovariansi dengan out

Parameter antarmuka generik yang ditandai out bersifat kovarian: parameter tersebut hanya muncul pada posisi keluaran. Dengan demikian, IEnumerable<Cat> dapat digunakan di tempat yang mengharapkan IEnumerable<Animal>.

Kovariansi mempertahankan kompatibilitas penetapan di sepanjang rantai pewarisan.

interface IProducer<out T>
{
    T Produce();
}

Kontravariansi dengan in

Parameter yang ditandai in bersifat kontravarian: parameter tersebut hanya muncul pada posisi masukan. Dengan demikian, IComparer<Animal> dapat digunakan di tempat yang memerlukan IComparer<Cat>.

Kontravariansi membalik arah kesesuaian tipe untuk konsumen.

interface IConsumer<in T>
{
    void Consume(T item);
}

Beberapa Parameter Tipe

Antarmuka generik dapat menerima lebih dari satu parameter. IDictionary<TKey, TValue> adalah contoh yang umum dikenal, dengan tipe kunci dan nilai yang terpisah.

Setiap parameter dapat secara mandiri bersifat invarian, kovarian, atau kontravarian.

interface IMapper<TIn, TOut>
{
    TOut Map(TIn input);
}

Pemrograman Menggunakan Antarmuka

Bergantung pada antarmuka generik, bukan kelas konkret, membuat kode lebih fleksibel. Anda dapat mengganti implementasi tanpa mengubah kode pemanggil.

Parameter metode yang bertipe IEnumerable<T> dapat menerima daftar, larik, dan hasil kueri dengan cara yang sama.

using System.Collections.Generic;
using System.Linq;

int Total(IEnumerable<int> values) => values.Sum();

Batasan Menggunakan Antarmuka Generik

Antarmuka generik sering digunakan sebagai batasan. where T : IComparable<T> memungkinkan metode mengurutkan atau membandingkan masukannya.

Ini menggabungkan dua fitur generik untuk menghasilkan algoritme yang aman dan dapat digunakan kembali.

T Min<T>(T a, T b) where T : IComparable<T>
    => a.CompareTo(b) <= 0 ? a : b;

Uji Cepat

Uji pemahaman Anda tentang antarmuka generik.

Ringkasan

Antarmuka generik mendeklarasikan parameter tipe dan memungkinkan implementasinya menetapkan atau meneruskannya. Contoh bawaan meliputi IEnumerable<T>, IComparable<T>, dan IDictionary<TKey, TValue>.

Anotasi varians out dan in memungkinkan kovarians dan kontravarians, sementara antarmuka generik berpadu secara alami dengan batasan where.

Gratis untuk memulai

Belajar C# dengan tutor AI — gratis

Tulis dan jalankan kode asli di browser kamu, dapatkan bantuan instan dari tutor AI 24/7, dan lanjutkan di mana kamu tinggalkan di web atau aplikasi.

Kursus
93
Pelajaran
346

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Antarmuka Generik” gratis?

Ya — teks lengkap “Antarmuka 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 “Antarmuka Generik”?

Abstraksikan berbagai tipe. 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 4 dari 4.

Berapa lama pelajaran “Antarmuka 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

  1. Metode Generik
  2. Kelas Generik
  3. Batasan where
  4. Antarmuka Generik
← Kembali ke C# Academy