1. Trang chủ
  2. » Công Nghệ Thông Tin

Phương thức ảo và tính đa hình doc

8 275 1
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 8
Dung lượng 741,95 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

OOP in C# - GV: Phạm Đình Sắc – dinhsac@gmail.com 1 Virtual method & Polymorphism Virtual method & Polymorphism Tính đa hình ¾Hai đặc điểm mạnh nhất của kế thừa đó là khả năng sử dụng lạ

Trang 1

OOP in C# - GV: Phạm Đình Sắc – dinhsac@gmail.com 1

Virtual method

& Polymorphism

Virtual method

& Polymorphism

Tính đa hình

¾Hai đặc điểm mạnh nhất của kế thừa đó là khả năng sử dụng lại mã chương trình và đa hình (polymorphism).

¾Đa hình là ý tưởng “sử dụng một giao diện chung cho nhiều phương thức khác nhau”, dựa trên phương thức ảo (virtual method).

¾Nói cách khác, Tính đa hình cho phép một thao tác có các cách xử lý khác nhau trên các đối tượng khác nhau.

Trang 2

OOP in C# - GV: Phạm Đình Sắc – dinhsac@gmail.com 3

Điều kiện cài đặt Tính đa hình

¾Để thực hiện được tính đa hình ta phải thực hiện các bước sau:

‰Lớp cơ sở đánh dấu phương thức ảo bằng

từ khóa virtual hoặc abstract

‰Các lớp dẫn xuất định nghĩa lại phương thức ảo này (đánh dấu bằng từ khóa

override)

¾Nhưng, những thành viên (member fields) or những thuộc tính (properties) và những hàm tĩnh (static) thì không được khai báo Virtual

Tham chiếu giữa lớp cơ sở và lớp dẫn xuất

¾Tham chiếu thuộc base class có thể trỏ đến object thuộc derived class và có thể truy cập virtual method đã define lại trong derived class

¾Nếu tham chiếu này trỏ tới object thuộc base class thì virtual method của lớp cơ sở được thực hiện

¾Nếu tham chiếu này trỏ tới object thuộc derived class thì virtual method đã được derived class định nghĩa lại được thực hiện.

Trang 3

OOP in C# - GV: Phạm Đình Sắc – dinhsac@gmail.com

VD: minh họa

class Tau

{ public void LayThongtin()

{

Console.WriteLine(“Day la chiec Tau”);

}

}

5

¾Ta xay dựng 3 class:

9Lớp Tau là lớp cơ sở

9Lớp TauChien và TauChoHang là lớp dẫn xuất từ lớp Tau

VD:

class TauChien : Tau

{ public void LayThongTin()

{

Console.WriteLine(“Day la tau Chien ”); }

}

class TauChoHang : Tau

{ public void LayThongTin()

{

Console.WriteLine(“Day la tau Cho Hang”);

Trang 4

OOP in C# - GV: Phạm Đình Sắc – dinhsac@gmail.com

VD:

7

class Program {

static void Main(string[] args)

{

Tau a = new Tau();

TauChien b = new TauChien();

TauChoHang c = new TauChoHang();

a.LayThongTin();

b.LayThongTin();

c.LayThongTin();

}

}

// Màn hình sẽ xuất hiện điều gì?

VD:

Nhưng ở đây ta chưa thấy được tính đa

hình gì hết trong lập trình hướng đối tượng.

Dau la chiec Tau Dau la tau Chien Dau la tau Cho Hang

Kết quả xuất ra:

Trang 5

OOP in C# - GV: Phạm Đình Sắc – dinhsac@gmail.com

Nếu ta khai báo 3 object đề là lớp Tau

9

class Program {

static void Main(string[] args)

{

Tau a = new Tau();

Tau b = new TauChien();

Tau c = new TauChoHang();

a.LayThongTin();

b.LayThongTin();

c.LayThongTin();

}

}

// Màn hình sẽ xuất hiện điều gì?

VD:

Ta đã thấy được tính đa hình, nhưng

chưa đầy đủ do việc kết xuất ra những kết không mong muốn

Dau la chiec Tau Dau la chiec Tau Dau la chiec Tau

Kết quả xuất ra:

Trang 6

OOP in C# - GV: Phạm Đình Sắc – dinhsac@gmail.com

VD: Đa hình

class Tau

{ public virtual void LayThongtin()

{

Console.WriteLine(“Day la chiec Tau”);

}

}

11

¾Để khắc phục tình trạng trên ta phải dùng từ

khóa virtual cho phương thức của lớp cơ

sở và từ khóa override cho tương ứng lớp dẫn xuất

VD:

class TauChien:Tau

{ public override void LayThongTin()

{

Console.WriteLine(“Day la tau Chien ”); }

}

class TauChoHang:Tau

{ public override void LayThongTin()

{

Console.WriteLine(“Day la tau Cho Hang”);

Trang 7

OOP in C# - GV: Phạm Đình Sắc – dinhsac@gmail.com

VD:

class Program {

static void Main(string[] args)

{

Tau a = new Tau();

Tau b = new TauChien();

Tau c = new TauChoHang();

a.LayThongTin();

b.LayThongTin();

c.LayThongTin();

}

}

13

Day la chiec Tau Day la tau Chien Day la tau Cho Hang

VD: thể hiện tính đa hình

class Program {

static void Main(string[] args)

{

Tau [] t = new Tau[3];

t[0] = new Tau();

t[1] = new TauChien();

t[2] = new TauChoHang();

for(int i=0; i<3; i++)

t[i].LayThongTin();

}

Trang 8

OOP in C# - GV: Phạm Đình Sắc – dinhsac@gmail.com

class Parent

{

public int A()

{

return ( B() *C() );

}

public virtual int B()

{

return 1 ;

}

public int C()

{

return 2 ;

}

}

class Child : Parent

{

Return 3 ; }

}

class Program {

static void Main() {

Child o = new Child();

} }

Q&A

Bài tập:

1 Đọc lại bài giảng

2 Làm các bài VD & bài tập trong GT

Ngày đăng: 29/06/2014, 02:20

w