0Pricing
C# Academy · Pelajaran

Metode Generik

Parameter tipe pada metode.

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

Metode generik mendeklarasikan satu atau beberapa parameter jenis miliknya sendiri, yang ditulis dalam kurung sudut setelah nama metode. Isi metode yang sama kemudian dapat digunakan untuk banyak jenis tanpa konversi atau pengulangan kode.

Parameter jenis merupakan pengganti seperti T. Kompiler mengganti pengganti tersebut dengan jenis sebenarnya saat metode dipanggil, sehingga semuanya tetap bertipe kuat.

void Print<T>(T value)
{
    Console.WriteLine(value);
}

Mendeklarasikan Parameter Jenis

Daftar parameter jenis <T> berada di antara nama metode dan daftar parameternya. Anda dapat menggunakan T sebagai jenis parameter, jenis hasil, atau jenis variabel lokal di dalam isi metode.

Sesuai konvensi, satu parameter jenis diberi nama T; nama deskriptif seperti TKey juga umum digunakan.

T Echo<T>(T input)
{
    return input;
}

Pemanggilan dengan Inferensi Tipe

Biasanya Anda tidak perlu menentukan argumen tipe secara eksplisit. Kompiler menyimpulkan T dari argumen yang Anda berikan.

Di sini, Echo(42) menyimpulkan T = int, sedangkan Echo("hi") menyimpulkan T = string. Inferensi tipe membuat pemanggilan generik tetap ringkas dan mudah dibaca.

using System;

class Program
{
    static T Echo<T>(T input) => input;

    static void Main()
    {
        Console.WriteLine(Echo(42));
        Console.WriteLine(Echo("hi"));
    }
}

Argumen Tipe Eksplisit

Jika inferensi tidak dapat menentukan tipe, atau Anda ingin menentukannya secara eksplisit, berikan argumen tipe di antara tanda kurung sudut pada lokasi pemanggilan.

Hal ini diperlukan jika tidak ada argumen yang membawa informasi tipe, misalnya pada metode yang T-nya hanya muncul dalam tipe pengembalian.

T Create<T>() where T : new() => new T();

// call:
var list = Create<int>();

Beberapa Parameter Tipe

Metode generik dapat mendeklarasikan beberapa parameter tipe yang dipisahkan dengan koma. Setiap parameter disimpulkan atau diberikan secara independen.

Contoh klasiknya adalah pertukaran atau pembuat pasangan yang menggabungkan dua tipe berbeda.

(TSecond, TFirst) Flip<TFirst, TSecond>(TFirst a, TSecond b)
{
    return (b, a);
}

Pertukaran Generik

Metode generik sangat berguna untuk utilitas yang tidak bergantung pada tipe konkretnya. Operasi pertukaran dapat menukar posisi dua nilai dengan tipe yang sama.

Kata kunci ref memungkinkan metode mengubah variabel pemanggil secara langsung.

using System;

class Program
{
    static void Swap<T>(ref T a, ref T b)
    {
        T temp = a;
        a = b;
        b = temp;
    }

    static void Main()
    {
        int x = 1, y = 2;
        Swap(ref x, ref y);
        Console.WriteLine($"{x} {y}");
    }
}

Batasan pada Parameter Metode

Metode generik dapat membatasi parameter tipenya dengan klausa where. Batasan memberi tahu kompiler operasi apa yang diperbolehkan pada T.

Di bawah ini, where T : IComparable<T> memungkinkan isi metode memanggil CompareTo dengan aman.

T Max<T>(T a, T b) where T : IComparable<T>
{
    return a.CompareTo(b) >= 0 ? a : b;
}

Metode Generik dalam Kelas Non-generik

Sebuah kelas tidak perlu generik untuk memuat metode generik. Kelas utilitas statis sering kali menampung metode semacam ini.

Dengan begitu, pembantu untuk keperluan umum dapat dikelompokkan tanpa memaksa seluruh kelas membawa parameter tipe.

static class Util
{
    public static T First<T>(T[] items) => items[0];
}

Inferensi dari Larik

Inferensi tipe juga bekerja melalui argumen berupa larik dan koleksi. Memberikan int[] secara otomatis menyimpulkan T = int.

Hal ini membuat algoritma generik terasa seperti fitur bawaan bahasa.

using System;

class Program
{
    static T First<T>(T[] items) => items[0];

    static void Main()
    {
        int[] nums = { 10, 20, 30 };
        Console.WriteLine(First(nums));
    }
}

Mengapa Tidak Cukup Menggunakan object?

Sebelum generik tersedia, kode menggunakan object dan konversi tipe. Cara ini menghilangkan keamanan tipe dan membungkus tipe nilai, sehingga kinerja menurun.

Metode generik menghindari pembungkusan untuk tipe nilai dan menemukan kesalahan tipe saat kompilasi, bukan saat program berjalan.

// Unsafe: needs a cast and can fail at runtime
object Echo(object o) => o;
int n = (int)Echo(5);

Mengembalikan Tipe yang Berbeda

Tipe pengembalian itu sendiri dapat bersifat generik, sehingga satu metode dapat menyesuaikan keluarannya dengan pemanggil. default(T) menghasilkan nilai nol untuk tipe nilai atau null untuk tipe referensi.

Hal ini berguna sebagai nilai cadangan yang aman saat tidak ada nilai yang tersedia.

T OrDefault<T>(bool ok, T value)
{
    return ok ? value : default(T);
}

Uji Singkat

Uji pemahaman Anda tentang metode generik.

Ringkasan

Metode generik mendeklarasikan parameter tipenya sendiri di antara tanda kurung sudut setelah nama metode. Kompiler biasanya menyimpulkan tipe dari argumen, tetapi Anda dapat memberikannya secara eksplisit.

Metode ini mempertahankan keamanan tipe, menghindari pembungkusan, dan dapat memiliki batasan where. Metode tersebut dapat ditempatkan di kelas apa pun, baik generik maupun tidak.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Metode Generik” gratis?

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

Parameter tipe pada metode. 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 1 dari 4.

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