C# - Delegates: Panduan Ramah untuk Pemula

Halo sana, bakal superstar pengoding! Hari ini, kita akan mendalam ke dunia yang menarik dari C# delegates. Jangan khawatir jika Anda belum pernah mendengar tentang mereka sebelumnya - pada akhir tutorial ini, Anda akan menjadi ahli delegate! Mari kita mulai perjalanan yang menarik ini bersama-sama.

C# - Delegates

Apa Itu Delegates?

Bayangkan Anda sedang mengatur sebuah pesta, dan Anda perlu seseorang untuk mengatur musik. Daripada melakukan itu sendiri, Anda menyerahkan tugas ini kepada teman Anda yang seorang DJ. Di C#, delegates bekerja secara mirip - mereka seperti pengirim kecil yang dapat menahan dan menjalankan method bagi kita.

Dalam kata yang sederhana, delegate adalah jenis yang mewakili referensi ke method dengan daftar parameter tertentu dan tipe kembalian. Pahami ini seperti blueprint untuk method.

Mendeklarasikan Delegates

Mari kita mulai dengan belajar bagaimana mendeklarasikan delegate. Sintaksanya cukup sederhana:

public delegate void SimpleDelegate();

Ini mendeklarasikan delegate bernama SimpleDelegate yang dapat merujuk ke method yang tidak mengambil parameter dan mengembalikan nothing (void).

Ini adalah contoh lain:

public delegate int MathDelegate(int x, int y);

MathDelegate ini dapat merujuk ke method yang mengambil dua integer dan mengembalikan integer.

Inisialisasi Delegates

Sekarang kita telah mendeklarasikan delegates, mari kita lihat bagaimana menggunakannya. Kita akan mulai dengan membuat method yang cocok dengan tanda tangan delegate:

public static void SayHello()
{
Console.WriteLine("Hello, Delegates!");
}

// Inisialisasi delegate
SimpleDelegate greet = new SimpleDelegate(SayHello);

// Menggunakan delegate
greet();

Ketika kita menjalankan kode ini, ia akan menampilkan: "Hello, Delegates!"

mari kitauraikan:

  1. Kita mendefinisikan method SayHello yang cocok dengan tanda tangan SimpleDelegate.
  2. Kita membuat instance dari SimpleDelegate dan menugaskan method SayHello kepadanya.
  3. Kita menjalankan delegate menggunakan greet(), yang kemudian menjalankan SayHello.

Multicasting Delegate

Sekarang, mari kita lihat bagian yang sangat menarik tentang delegates. Mereka dapat menahan referensi ke beberapa method! Ini disebut multicasting. Mari kita lihat dalam praktik:

public static void SayHello() { Console.WriteLine("Hello"); }
public static void SayGoodbye() { Console.WriteLine("Goodbye"); }

SimpleDelegate greetings = SayHello;
greetings += SayGoodbye;

greetings(); // Ini akan menjalankan baik `SayHello` dan `SayGoodbye`

Output:

Hello
Goodbye

Apakah itu menarik? Kita telah menambahkan dua method ke delegate kami, dan ketika kita menjalankan itu, kedua method tersebut dipanggil dalam urutan mereka ditambahkan.

Menggunakan Delegates

Delegates sangat berguna dalam banyak kasus. Salah satu penggunaan umum adalah dalam pengelolaan event. Mari kita lihat contoh sederhana:

public delegate void TemperatureChangedHandler(float newTemperature);

class Thermostat
{
private float _temperature;
public event TemperatureChangedHandler TemperatureChanged;

public float Temperature
{
get { return _temperature; }
set
{
if (_temperature != value)
{
_temperature = value;
OnTemperatureChanged();
}
}
}

protected virtual void OnTemperatureChanged()
{
if (TemperatureChanged != null)
{
TemperatureChanged(_temperature);
}
}
}

class Program
{
static void Main()
{
Thermostat thermostat = new Thermostat();
thermostat.TemperatureChanged += HandleTemperatureChange;

thermostat.Temperature = 25.5f;
}

static void HandleTemperatureChange(float newTemperature)
{
Console.WriteLine($"Temperature changed to {newTemperature}°C");
}
}

Dalam contoh ini, kita telah membuat kelas Thermostat yang menggunakan delegate untuk memberitahu saat suhu berubah. Metode Main mensubskripsi ke event ini, dan saat suhu diatur, ia memicu metode HandleTemperatureChange.

Metode Delegate

Berikut adalah tabel dari beberapa metode yang berkaitan dengan delegate:

Metode Deskripsi
Invoke Memanggil method yang dipegang oleh delegate
BeginInvoke Memulai panggilan asinkronus delegate
EndInvoke Menyelesaikan panggilan asinkronus delegate
GetInvocationList Mengembalikan array dari delegate yang mewakili daftar panggilan

Kesimpulan

Selamat! Anda telah mengambil langkah pertama ke dunia C# delegates. Kita telah melihat mendeklarasikan delegates, menginisialisasikan mereka, multicasting, dan bahkan melihat contoh praktis dengan pengelolaan event.

Ingat, delegates mungkin terlihat abstrak pada awalnya, tetapi mereka adalah tools yang sangat kuat di C#. Mereka memungkinkan desain yang fleksibel dan lepas kait, khususnya dalam programming yang terdorong oleh event.

Sebagai Anda terus menjalankan perjalanan C# Anda, Anda akan menemukan banyak penggunaan untuk delegates. Mereka seperti pisau multitugas di dalam alat pengoding Anda - multifungsi dan selalu membantu saat Anda membutuhkannya.

Terus latihan, tetap bersemangat, dan sebelum Anda sadari, Anda akan dapat menyerahkan tugas ke kode Anda seperti seorang pro! Selamat coding!

Credits: Image by storyset