Memahami Kelas Bersarang C#: Definisi, Penggunaan, dan Warisan
Memahami Kelas Bersarang C#
Jelajahi cara mendefinisikan, mengakses, dan mewarisi kelas bersarang di C# dengan contoh praktis yang menunjukkan praktik terbaik.
Di C#, sebuah kelas dapat dideklarasikan di dalam kelas lain. Tipe dalam disebut kelas bersarang. Misalnya:
class OuterClass { // ... outer members class InnerClass { // ... inner members } }
Contoh ini membuat InnerClass di dalam OuterClass. Tipe dalam hanya terlihat di dalam tipe luar kecuali modifier aksesnya memungkinkan sebaliknya.
Mengakses Anggota Kelas Bersarang
Untuk bekerja dengan tipe bersarang, Anda terlebih dahulu membuat instance dari setiap kelas secara terpisah.
1. Buat instance dari kelas luar
OuterClass outer = new OuterClass();
Di sini, outer adalah objek dari OuterClass.
2. Buat instance dari kelas bersarang
OuterClass.InnerClass inner = new OuterClass.InnerClass();
Karena InnerClass bersarang di dalam OuterClass, Anda mempersingkatnya dengan nama tipe luar.
Setelah diinstansiasi, Anda dapat memanggil anggota melalui referensi objek.
Contoh: Kelas Bersarang dengan Metode
using System; namespace NestedClassDemo { public class Car { public void DisplayCar() => Console.WriteLine("Car: Bugatti"); public class Engine { public void DisplayEngine() => Console.WriteLine("Engine: Petrol Engine"); } } class Program { static void Main(string[] args) { Car sportsCar = new Car(); sportsCar.DisplayCar(); Car.Engine petrolEngine = new Car.Engine(); petrolEngine.DisplayEngine(); Console.ReadLine(); } } }
Output
Car: Bugatti Engine: Petrol Engine
Contoh ini menunjukkan cara membuat objek dari kelas luar Car dan kelas bersarang Engine serta memanggil metodenya.
Perhatikan bahwa Anda tidak dapat memanggil metode tipe bersarang secara langsung dari instance luar:
// Invalid sportsCar.DisplayEngine();
Mengakses Anggota Kelas Luar dari Dalam Kelas Bersarang
Kelas bersarang dapat mereferensikan anggota dari tipe tempatnya berada. Anda dapat menggunakan instance dari tipe luar atau nama tipe luar untuk anggota statis.
Menggunakan Instance untuk Mengakses Anggota Instance
using System; namespace NestedClassDemo { public class Car { public string Brand = "Bugatti"; public class Engine { public void ShowBrand() { Car car = new Car(); Console.WriteLine("Brand: " + car.Brand); } } } class Program { static void Main(string[] args) { Car.Engine engine = new Car.Engine(); engine.ShowBrand(); Console.ReadLine(); } } }
Output
Brand: Bugatti
Mengakses Anggota Statis Tanpa Instantiasi
using System; namespace NestedClassDemo { public class Car { public static string Brand = "Bugatti"; public class Engine { public void ShowBrand() { Console.WriteLine("Brand: " + Car.Brand); } } } class Program { static void Main(string[] args) { Car.Engine engine = new Car.Engine(); engine.ShowBrand(); Console.ReadLine(); } } }
Output
Brand: Bugatti
Warisan yang Melibatkan Kelas Bersarang
Kelas bersarang dapat berpartisipasi dalam warisan sama seperti tipe lainnya.
Menurunkan Kelas dari Kelas Luar
using System; namespace NestedClassDemo { class Computer { public void Display() => Console.WriteLine("Method of Computer class"); public class CPU { // Additional members can be added here } } class Laptop : Computer { // Laptop inherits all members of Computer } class Program { static void Main(string[] args) { Laptop laptop = new Laptop(); laptop.Display(); Console.ReadLine(); } } }
Output
Method of Computer class
Menurunkan Kelas dari Kelas Bersarang
using System; namespace NestedClassDemo { class Computer { public class CPU { public void Display() => Console.WriteLine("Method of CPU class"); } } class Laptop : Computer.CPU { // Laptop inherits members of Computer.CPU } class Program { static void Main(string[] args) { Laptop laptop = new Laptop(); laptop.Display(); Console.ReadLine(); } } }
Output
Method of CPU class
Saat mewarisi kelas bersarang, Anda harus mempersingkat tipe dengan nama kelas luarnya, misalnya, Computer.CPU.