Menguasai Warisan C#: Konsep, Jenis, dan Kode Praktis
Warisan C# Dijelaskan
Panduan ini mencakup dasar-dasar warisan di C#, berbagai bentuknya, dan contoh kode praktis.
Warisan di C# memungkinkan Anda membuat kelas baru yang diturunkan dari kelas yang sudah ada, membentuk hubungan induk (base) dan anak (derived). Fitur canggih dari Pemrograman Berorientasi Objek (OOP) ini mempromosikan penggunaan kembali kode dan organisasi yang logis.
Kelas base menyediakan field, properti, dan metode yang diwarisi oleh kelas derived, memungkinkan anak untuk memperluas atau menyesuaikan perilaku sambil menjaga logika bersama di satu tempat.
Cara Mendeklarasikan Warisan di C#
Di C#, tanda titik dua (:) menunjukkan warisan:
class Animal { // fields and methods } // Dog inherits from Animal class Dog : Animal { // fields and methods of Animal // fields and methods of Dog }
Di sini, Dog memperluas Animal, mendapatkan akses ke anggotanya. Diagram di bawah ini mengilustrasikan hubungan tersebut.
Contoh: Warisan Dasar
using System; namespace Inheritance { // Base class class Animal { public string name; public void Display() { Console.WriteLine("I am an animal"); } } // Derived class class Dog : Animal { public void GetName() { Console.WriteLine("My name is " + name); } } class Program { static void Main(string[] args) { Dog labrador = new Dog(); labrador.name = "Rohu"; labrador.Display(); labrador.GetName(); Console.ReadLine(); } } }
Output
I am an animal My name is Rohu
Dalam contoh ini, Dog mewarisi field name dan metode Display() dari Animal. Kelas derived juga dapat menambahkan anggotanya sendiri, seperti GetName().
Hubungan "is-a"
Warisan mewakili hubungan "is-a". Gunakan ketika satu kelas secara logis adalah bentuk khusus dari yang lain.
Dog adalah Animal
Apple adalah Fruit
Car adalah Vehicle
Hubungan ini memalukan menurunkan Dog dari Animal, Apple dari Fruit, dan Car dari Vehicle.
Anggota Protected dalam Warisan
Saat field atau metode dideklarasikan protected, ia dapat diakses di dalam kelasnya sendiri dan semua kelas derived, tetapi disembunyikan dari kode eksternal.
Contoh: Menggunakan Metode Protected
using System; namespace Inheritance { class Animal { protected void Eat() { Console.WriteLine("I can eat"); } } class Dog : Animal { static void Main(string[] args) { Dog labrador = new Dog(); labrador.Eat(); Console.ReadLine(); } } }
Output
I can eat
Karena Eat() adalah protected, kelas Dog dapat memanggilnya, tetapi kode di luar hierarki tidak dapat.
Jenis Warisan
Warisan manifests in several patterns:
1. Single Inheritance
Satu kelas derived mewarisi dari satu kelas base.
2. Multilevel Inheritance
Rantai warisan di mana sebuah kelas mewarisi dari base, lalu kelas lain mewarisi dari derived tersebut.
3. Hierarchical Inheritance
Banyak kelas derived berbagi kelas base yang sama.
4. Multiple Inheritance
Sementara C# tidak mendukung mewarisi dari banyak kelas, antarmuka menyediakan alternatif fleksibel untuk mencapai perilaku yang serupa.
5. Hybrid Inheritance
Kombinasi dari dua atau lebih jenis warisan, seperti multilevel plus hierarchical.
Method Overriding
Saat kelas derived mendeklarasikan metode dengan tanda tangan yang sama dengan metode kelas base yang ditandai virtual, metode derived dapat mengoverride-nya menggunakan override. Ini memungkinkan perilaku polymorphic.
using System; namespace Inheritance { class Animal { public virtual void Eat() { Console.WriteLine("I eat food"); } } class Dog : Animal { public override void Eat() { Console.WriteLine("I eat dog food"); } } class Program { static void Main(string[] args) { Dog labrador = new Dog(); labrador.Eat(); } } }
Output
I eat dog food
Metode Eat() di Dog mengoverride yang ada di Animal. Kata kunci virtual mengizinkan override, sementara override mengisyaratkan substitusi.
Menggunakan Kata Kunci base
Kadang Anda perlu memanggil implementasi kelas base dari metode overriding. Kata kunci base memfasilitasi ini.
Contoh: Memanggil Metode Base
using System; namespace Inheritance { class Animal { public virtual void Eat() { Console.WriteLine("Animals eat food."); } } class Dog : Animal { public override void Eat() { base.Eat(); Console.WriteLine("Dogs eat dog food."); } } class Program { static void Main(string[] args) { Dog labrador = new Dog(); labrador.Eat(); } } }
Output
Animals eat food. Dogs eat dog food.
Di sini, base.Eat() memanggil implementasi Animal sebelum mengeksekusi logika kelas derived.
Mengapa Warisan Penting di C#
Warisan memungkinkan logika yang dapat digunakan kembali di seluruh kelas yang terkait. Pertimbangkan bentuk geometri di mana perhitungan keliling berbagi rumus umum.
Buat kelas base RegularPolygon dengan metode CalculatePerimeter().
Turunkan Square dan Rectangle darinya, menambahkan properti spesifik seperti Length dan Sides.
Setiap kelas derived juga dapat mengimplementasikan perhitungan luasnya sendiri sambil menggunakan kembali logika keliling.
Contoh Ilustratif
using System; namespace Inheritance { class RegularPolygon { public void CalculatePerimeter(int length, int sides) { int result = length * sides; Console.WriteLine("Perimeter: " + result); } } class Square : RegularPolygon { public int Length = 200; public int Sides = 4; public void CalculateArea() { int area = Length * Length; Console.WriteLine("Area of Square: " + area); } } class Rectangle : RegularPolygon { public int Length = 100; public int Breadth = 200; public int Sides = 4; public void CalculateArea() { int area = Length * Breadth; Console.WriteLine("Area of Rectangle: " + area); } } class Program { static void Main(string[] args) { Square s1 = new Square(); s1.CalculateArea(); s1.CalculatePerimeter(s1.Length, s1.Sides); Rectangle t1 = new Rectangle(); t1.CalculateArea(); t1.CalculatePerimeter(t1.Length, t1.Sides); } } }
Output
Area of Square: 40000 Perimeter: 800 Area of Rectangle: 20000 Perimeter: 400
Pola ini mengilustrasikan bagaimana warisan mengurangi duplikasi dan meningkatkan kemampuan pemeliharaan.