Inheritance (การสืบทอด) ให้ Derived Class ใช้ Members ของ Base Class ได้ ใช้ Keyword `:`
Syntax พื้นฐาน
// Base Class
public class BaseClass
{
// Members...
}
// Derived Class
public class DerivedClass : BaseClass
{
// Members + Inherited Members
}
ตัวอย่างครบถ้วน: Shape → Rectangle
using System;
namespace InheritanceApplication
{
// Base Class
public class Shape
{
protected int Width { get; set; }
protected int Height { get; set; }
public void SetWidth(int w) => Width = w;
public void SetHeight(int h) => Height = h;
}
// Derived Class
public class Rectangle : Shape
{
public int GetArea() => Width * Height;
}
// Another Derived Class
public class Triangle : Shape
{
public int GetArea() => (Width * Height) / 2;
}
class Demo
{
static void Main(string[] args)
{
Rectangle rect = new Rectangle();
rect.SetWidth(5);
rect.SetHeight(7);
Console.WriteLine($"Rectangle Area: {rect.GetArea()}"); // 35
Triangle tri = new Triangle();
tri.SetWidth(10);
tri.SetHeight(4);
Console.WriteLine($"Triangle Area: {tri.GetArea()}"); // 20
Console.ReadKey();
}
}
}
ผลลัพธ์
Rectangle Area: 35
Triangle Area: 20
Access Modifiers ใน Inheritance
| Modifier | Base Class | Derived Class | Outside |
|---|---|---|---|
| public | ✓ | ✓ | ✓ |
| protected | ✓ | ✓ | ✗ |
| internal | ✓ | ✓ (Same Assembly) | ✓ (Same Assembly) |
| protected internal | ✓ | ✓ | ✓ (Same Assembly) |
| private | ✓ | ✗ | ✗ |
| private protected | ✓ | ✓ (Same Assembly) | ✗ |
Constructor Chaining
public class Base
{
public Base(string message)
{
Console.WriteLine($"Base: {message}");
}
}
public class Derived : Base
{
// ต้องเรียก Base Constructor ผ่าน base()
public Derived(string message, int value) : base(message)
{
Console.WriteLine($"Derived: {value}");
}
}
// Usage
var d = new Derived("Hello", 42);
// Output:
// Base: Hello
// Derived: 42
Method Overriding (Polymorphism)
public class Animal
{
public virtual void Speak() => Console.WriteLine("Animal sound");
}
public class Dog : Animal
{
public override void Speak() => Console.WriteLine("Woof!");
}
public class Cat : Animal
{
public override void Speak() => Console.WriteLine("Meow!");
}
// Polymorphic Call
Animal a = new Dog();
a.Speak(); // "Woof!" - Calls Derived Version
Sealed - ป้องกันการสืบทอด
public sealed class FinalClass { } // ไม่สามารถ Inherit ได้
public class Base
{
public virtual void Method() { }
public sealed override void SealedMethod() { } // Derived ไม่สามารถ Override ได้
}
Multiple Inheritance? → Interface
C# ไม่รองรับ Multiple Class Inheritance แต่ Implement Interface ได้หลายอัน
public interface IFlyable { void Fly(); }
public interface ISwimmable { void Swim(); }
public class Duck : IFlyable, ISwimmable
{
public void Fly() => Console.WriteLine("Flying");
public void Swim() => Console.WriteLine("Swimming");
}
Base Keyword
public class Derived : Base
{
public void CallBase()
{
base.Method(); // เรียก Base Method
base.Property = 10; // Set Base Property
var x = base.Field; // Access Base Field
}
}