Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C#

การสืบทอดคลาสใน C# - Inheritance Basics

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

ModifierBase ClassDerived ClassOutside
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
    }
}