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();