Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C#

Kế thừa vs Composition trong C#

Kế thừa (Inheritance)

Class mới kế thừa member từ class có sẵn (base class). Mối quan hệ IS-A.

Ví dụ: Mammal IS-A Animal, Dog IS-A Mammal => Dog IS-A Animal.

class Shape { ... }
class Circle : Shape { ... }
class Square : Shape { ... }

Composition

Object cha chứa object con. Mối quan hệ HAS-A (part-of). Nếu cha bị hủy, con cũng mất.

Ví dụ: Car HAS-A Engine. Car hủy => Engine hủy.

public class Engine { ... }

public class Car
{
    Engine eng = new Engine(); // Composition
    ...
}

So sánh

Tiêu chíInheritanceComposition
Mối quan hệIS-AHAS-A
CouplingTight (chặt)Loose (lỏng)
Tái sử dụngKế thừa implementationDelegate to component
Thay đổi runtimeKhóDễ (swap component)
Đa kế thừaKhông (single inheritance)Có (nhiều component)

Nguyên tắc: "Favor composition over inheritance" - ưu tiên composition trừ khi rõ ràng là IS-A relationship.