C# - Penyusunan: Panduan untuk Pemula

Hai sana, bakat coding masa depan! Hari ini, kita akan memulakan sebuah perjalanan yang menarik ke dalam dunia C# dan menjelajah salah satu konsep asasnya: Penyusunan. Jangan khawatir jika anda belum pernah menulis satu baris kod sebelum ini - saya disini untuk menghidangkan anda setiap langkah. Jadi, mari kita masuk ke dalam!

C# - Encapsulation

Apa Itu Penyusunan?

Sebelum kita masuk ke dalam perincian, mari kita memahami apa yang dimaksudkan oleh penyusunan. Bayangkan anda mempunyai sebuah kotak ajaib yang dapat melakukan hal-hal yang menakjubkan, tetapi anda tidak perlu tahu bagaimana ia berfungsi di dalam - anda hanya perlu tahu bagaimana menggunainya. Itu adalah penyusunan dalam bentuk ringkas!

Dalam C#, penyusunan adalah tentang pengemasan data ( pembolehubah) dan method yang beroperasi pada data itu dalam satu unit atau objek. Ia seperti membuat sebuah kapsul perlindungan di sekeliling kod anda, hence nama "penyusunan".

Sekarang, mari kita jelajah bagaimana C# implementasikan penyusunan melalui penanda akses.

Penanda Akses dalam C

Penanda akses adalah kata kunci yang menentukan ketersediaan kelas, method, atau properti dalam kod anda. Anggap mereka seperti tingkat berbeza kebenaran akses. C# menyediakan lima penanda akses utama:

  1. Public
  2. Private
  3. Protected
  4. Internal
  5. Protected Internal

Mari kitaongkikan mereka satu per satu.

Penanda Akses Public

Kata kunci public adalah seperti "pass akses semua kawasan". Apabila anda mengisytiharkan seorang ahli sebagai public, dia boleh diakses dari mana-mana bahagian dalam program anda.

public class Person
{
public string Name { get; set; }

public void SayHello()
{
Console.WriteLine($"Hello, my name is {Name}!");
}
}

class Program
{
static void Main(string[] args)
{
Person person = new Person();
person.Name = "Alice";  // Mengakses properti public
person.SayHello();  // Menyambar method public
}
}

Dalam contoh ini, kedua-dua Name dan SayHello() adalah public, jadi kita boleh mengakses mereka secara langsung dari method Main.

Penanda Akses Private

Sekarang, private adalah seperti "kawasan untuk pekerja sahaja". Ahli private hanya boleh diakses dalam kelas yang sama.

public class BankAccount
{
private double balance;

public void Deposit(double amount)
{
if (amount > 0)
{
balance += amount;
}
}

public double GetBalance()
{
return balance;
}
}

class Program
{
static void Main(string[] args)
{
BankAccount account = new BankAccount();
account.Deposit(100);
// account.balance = 1000000;  // Ini akan menyebabkan kesilapan!
Console.WriteLine($"Balance: {account.GetBalance()}");
}
}

Di sini, balance adalah private, jadi kita tidak boleh mengaksesnya secara langsung dari luar kelas BankAccount. Kita perlu menggunakan method public seperti Deposit() dan GetBalance() untuk berinteraksi dengannya.

Penanda Akses Protected

protected ahli boleh diakses dalam kelas yang sama dan oleh kelas turunan. Ia seperti " seksyen keluarga sahaja".

public class Animal
{
protected string name;

public Animal(string name)
{
this.name = name;
}

protected void Eat()
{
Console.WriteLine($"{name} is eating.");
}
}

public class Dog : Animal
{
public Dog(string name) : base(name) { }

public void Bark()
{
Console.WriteLine($"{name} is barking!");  // Boleh mengakses ahli protected
Eat();  // Boleh menamakan method protected
}
}

class Program
{
static void Main(string[] args)
{
Dog dog = new Dog("Buddy");
dog.Bark();
// dog.name = "Max";  // Ini akan menyebabkan kesilapan!
// dog.Eat();  // Ini juga akan menyebabkan kesilapan!
}
}

Dalam contoh ini, Dog boleh mengakses name dan method Eat() protected daripada kelas induk Animal, tetapi kita tidak boleh mengakses ini secara langsung dari Main.

Penanda Akses Internal

internal ahli boleh diakses dalam assembly yang sama (ber fikir tentang assembly seperti compiled .dll atau .exe file). Ia seperti "kawasan pekerja syarikat sahaja".

// Dalam AssemblyOne.cs
internal class InternalClass
{
internal void InternalMethod()
{
Console.WriteLine("This is an internal method.");
}
}

// Dalam Program.cs (assembly yang sama)
class Program
{
static void Main(string[] args)
{
InternalClass obj = new InternalClass();
obj.InternalMethod();  // Ini berjaya!
}
}

// Dalam assembly lain, ini tidak akan berjaya:
// InternalClass obj = new InternalClass();  // Kesilapan!

Penanda Akses Protected Internal

Akhirnya, protected internal adalah gabungan protected dan internal. Ia boleh diakses dalam assembly yang sama atau oleh kelas turunan dalam assembly lain.

// Dalam AssemblyOne.cs
public class BaseClass
{
protected internal void ProtectedInternalMethod()
{
Console.WriteLine("This is a protected internal method.");
}
}

// Dalam AssemblyTwo.cs
public class DerivedClass : BaseClass
{
public void CallProtectedInternalMethod()
{
ProtectedInternalMethod();  // Ini berjaya!
}
}

// Dalam Program.cs (AssemblyTwo)
class Program
{
static void Main(string[] args)
{
DerivedClass obj = new DerivedClass();
obj.CallProtectedInternalMethod();
// obj.ProtectedInternalMethod();  // Ini tidak akan berjaya!
}
}

Summary Penanda Akses

Ini adalah jadual ringkas menggabungkan tingkat akses:

Penanda Akses Kelas Sama Kelas Turunan (Assembly Sama) Kelas Bukan Turunan (Assembly Sama) Kelas Turunan (Assembly Lain) Kelas Bukan Turunan (Assembly Lain)
Public Ya Ya Ya Ya Ya
Private Ya Tidak Tidak Tidak Tidak
Protected Ya Ya Tidak Ya Tidak
Internal Ya Ya Ya Tidak Tidak
Protected Internal Ya Ya Ya Ya Tidak

Dan begitu sahaja! Anda telah mengambil langkah pertama ke dalam dunia penyusunan dalam C#. Ingat, penyusunan adalah tentang mengawal akses ke kod dan data anda. Ia membantu anda menulis program yang lebih selamat, mudah diuruskan, dan fleksibel.

Buat terus latihan, kekal sebarang keraguan, dan kod yang gembira!

Credits: Image by storyset