0Pricing
C# Academy · Pelajaran

Mendefinisikan Metode Ekstensi

Tulis metode statis dengan pengubah this.

Mendefinisikan Metode Ekstensi 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 Ekstensi?

Metode ekstensi memungkinkan Anda menambahkan metode baru ke jenis yang sudah ada tanpa memodifikasinya atau membuat jenis turunan. Anda memanggilnya seolah-olah metode instans, tetapi sebenarnya metode static khusus.

Ekstensi sangat cocok ketika Anda tidak memiliki kode sumber suatu jenis (seperti string atau int), tetapi ingin menambahkan perilaku baru yang praktis.

Tiga Persyaratan

Untuk mendeklarasikan metode ekstensi, Anda memerlukan: kelas statis, metode statis, dan parameter pertama yang ditandai dengan kata kunci this. Parameter this tersebut menentukan jenis yang Anda perluas.

using System;

public static class StringExtensions
{
    public static int WordCount(this string text)
    {
        if (string.IsNullOrWhiteSpace(text)) return 0;
        return text.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries).Length;
    }
}

public class Program
{
    public static void Main()
    {
        string sentence = "the quick brown fox";
        Console.WriteLine(sentence.WordCount());
    }
}

Memanggilnya Seperti Metode Instans

Meskipun WordCount bersifat statis, Anda memanggilnya sebagai sentence.WordCount(). Di balik layar, kompilator mengubah pemanggilan tersebut menjadi StringExtensions.WordCount(sentence).

using System;
using System.Linq;

public static class StringExtensions
{
    public static string Repeat(this string text, int times)
    {
        return string.Concat(Enumerable.Repeat(text, times));
    }
}

public class Program
{
    public static void Main()
    {
        // These two lines do exactly the same thing
        Console.WriteLine("ab".Repeat(3));
        Console.WriteLine(StringExtensions.Repeat("ab", 3));
    }
}

Parameter ini Menerima Instans

Nilai di sebelah kiri titik menjadi parameter this. Anda dapat menambahkan parameter lain setelahnya, dan pemanggil meneruskan parameter tersebut seperti biasa.

using System;

public static class IntExtensions
{
    public static bool IsBetween(this int value, int low, int high)
    {
        return value >= low && value <= high;
    }
}

public class Program
{
    public static void Main()
    {
        int age = 25;
        Console.WriteLine(age.IsBetween(18, 65));
        Console.WriteLine(10.IsBetween(1, 5));
    }
}

Memperluas Jenis Anda Sendiri

Ekstensi tidak hanya digunakan untuk jenis pustaka. Anda juga dapat memperluas kelas milik Anda sendiri, yang berguna untuk mempertahankan jenis inti yang bersih sambil menambahkan perilaku pembantu di tempat lain.

using System;

public class Money
{
    public decimal Amount { get; }
    public Money(decimal amount) { Amount = amount; }
}

public static class MoneyExtensions
{
    public static string ToUsd(this Money m) => "$" + m.Amount.ToString("0.00");
}

public class Program
{
    public static void Main()
    {
        var price = new Money(19.5m);
        Console.WriteLine(price.ToUsd());
    }
}

Ekstensi Tidak Dapat Mengakses Anggota Privat

Metode ekstensi hanyalah metode statis di kelas lain, sehingga hanya dapat menggunakan bagian publik (atau internal jika berada dalam rakitan yang sama) dari jenis tersebut. Metode ini tidak dapat mengakses bidang privat.

using System;

public class Counter
{
    private int _count;
    public int Value => _count;
    public void Increment() => _count++;
}

public static class CounterExtensions
{
    // Can only use public members like Value and Increment
    public static bool IsZero(this Counter c) => c.Value == 0;
}

public class Program
{
    public static void Main()
    {
        var c = new Counter();
        Console.WriteLine(c.IsZero());
        c.Increment();
        Console.WriteLine(c.IsZero());
    }
}

Merangkai Metode Ekstensi

Karena setiap ekstensi mengembalikan nilai, Anda dapat merangkainya menjadi alur berantai yang lancar. Alur ini dibaca dari atas ke bawah dan merupakan gaya yang digunakan LINQ.

using System;

public static class TextExtensions
{
    public static string Shout(this string s) => s.ToUpper();
    public static string Bang(this string s) => s + "!";
}

public class Program
{
    public static void Main()
    {
        string result = "hello".Shout().Bang();
        Console.WriteLine(result);
    }
}

Nilai Kosong dan Metode Ekstensi

Berbeda dari pemanggilan instans sungguhan, metode ekstensi dapat berjalan bahkan ketika penerimanya bernilai null, karena tidak ada referensi yang diakses sampai kode Anda menyentuhnya. Hal ini memungkinkan Anda menulis pembantu yang aman terhadap nilai kosong.

using System;

public static class StringExtensions
{
    public static bool IsBlank(this string text)
    {
        // text may be null here, and that is fine
        return string.IsNullOrWhiteSpace(text);
    }
}

public class Program
{
    public static void Main()
    {
        string nothing = null;
        Console.WriteLine(nothing.IsBlank());
        Console.WriteLine("x".IsBlank());
    }
}

Metode Instans Diutamakan daripada Ekstensi

Jika ada metode instans sungguhan dengan tanda tangan yang cocok, kompilator selalu memilihnya daripada metode ekstensi. Ekstensi hanya mengisi fungsi yang belum disediakan oleh jenis tersebut.

using System;

public static class Ext
{
    // This will be ignored because string already has ToString()
    public static string ToString(this string s, int n) => s + n;
}

public class Program
{
    public static void Main()
    {
        // Resolves to the built-in instance ToString(), not the extension
        Console.WriteLine("value: " + "abc".ToString());
    }
}

Pustaka Pembantu Praktis

Mengelompokkan ekstensi yang berkaitan dalam satu kelas statis akan membuat pustaka utilitas yang rapi. Berikut adalah kelas pembantu numerik kecil yang dapat Anda gunakan kembali di berbagai proyek.

using System;

public static class NumberExtensions
{
    public static bool IsEven(this int n) => n % 2 == 0;
    public static int Squared(this int n) => n * n;
    public static double Percent(this int n) => n / 100.0;
}

public class Program
{
    public static void Main()
    {
        Console.WriteLine(4.IsEven());
        Console.WriteLine(5.Squared());
        Console.WriteLine(50.Percent());
    }
}

Coba Sendiri

Gabungkan hal-hal yang telah Anda pelajari: satu kelas statis dengan beberapa ekstensi yang fokus, lalu panggil secara berantai. Beginilah tepatnya pustaka pembantu sehari-hari dibuat.

using System;

public static class StringExtensions
{
    public static string Capitalize(this string s)
        => string.IsNullOrEmpty(s) ? s : char.ToUpper(s[0]) + s.Substring(1);
    public static string Surround(this string s, char c) => c + s + c;
}

public class Program
{
    public static void Main()
    {
        Console.WriteLine("hello".Capitalize().Surround('*'));
    }
}

Pemeriksaan Singkat

Uji pemahaman Anda tentang deklarasi metode ekstensi.

Ringkasan

Anda telah mempelajari bahwa metode ekstensi adalah metode static dalam kelas static yang parameter pertamanya menggunakan this. Metode ini dipanggil dengan sintaks instans, tetapi dikompilasi menjadi pemanggilan statis biasa.

  • Tiga persyaratan: kelas statis, metode statis, dan parameter pertama this.
  • Hanya anggota publik yang dapat diakses.
  • Metode instans selalu lebih diutamakan.
  • Ekstensi dapat dirangkai dan bahkan dapat berjalan pada penerima null.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Mendefinisikan Metode Ekstensi” gratis?

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

Tulis metode statis dengan pengubah this. 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 “Mendefinisikan Metode Ekstensi” 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. Mendefinisikan Metode Ekstensi
  2. Memperluas Antarmuka dan Generik
  3. Resolusi Metode Ekstensi
  4. Merancang Ekstensi yang Baik
← Kembali ke C# Academy