Inheritance, Interfaces & Polymorphism

লেসন ৬ / ৫০

Inheritance

public class Animal {
    public string Name { get; set; }
    public virtual void Speak() {       // virtual = override-able
        Console.WriteLine("Some sound");
    }
}

public class Dog : Animal {              // : দিয়ে inherit
    public override void Speak() {       // override
        Console.WriteLine("ভেউ ভেউ");
    }

    public void Fetch() => Console.WriteLine("Fetching!");
}

public class Cat : Animal {
    public override void Speak() {
        Console.WriteLine("মেও মেও");
    }
}

// Polymorphism
Animal a = new Dog();
a.Speak();    // "ভেউ ভেউ" — runtime এ resolve

base Keyword

public class Puppy : Dog {
    public override void Speak() {
        base.Speak();    // parent এর version call
        Console.WriteLine("(soft)");
    }

    public Puppy(string name) : base() {  // parent constructor
        Name = name;
    }
}

Abstract Class

public abstract class Shape {
    public abstract double Area();        // body নেই, derived class দেবে
    public virtual void Describe() =>
        Console.WriteLine($"Area: {Area()}");
}

public class Circle : Shape {
    public double Radius { get; set; }
    public override double Area() => Math.PI * Radius * Radius;
}

// Shape s = new Shape();  // ❌ Error — abstract instantiate করা যায় না

Interface ⭐

public interface IPayable {
    decimal CalculatePay();      // method signature
    string Currency { get; }     // property
}

public interface ILoggable {
    void Log(string message);
}

// Multiple interface implement
public class Employee : IPayable, ILoggable {
    public decimal Salary { get; set; }
    public string Currency => "BDT";

    public decimal CalculatePay() => Salary;
    public void Log(string msg) => Console.WriteLine($"LOG: {msg}");
}

sealed — Inheritance বন্ধ

public sealed class FinalClass { }
// public class Child : FinalClass {}  // ❌ Error

is, as Operator

Animal a = new Dog();

if (a is Dog) {
    Dog d = (Dog)a;
    d.Fetch();
}

// Pattern matching (C# 7+)
if (a is Dog dog) {
    dog.Fetch();
}

// as — null দেয় cast fail হলে
Dog d = a as Dog;
if (d != null) d.Fetch();