1. Trang chủ
  2. » Luận Văn - Báo Cáo

lớp trừu tượng và lớp bị khóa

13 196 0

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

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 13
Dung lượng 912,57 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 – sacvn@yahoo.com 1 1 Abstract class & Sealed class Abstract class & Sealed class Lớp trừu tượng lớp dẫn xuất không nhất thiết phải định nghĩa lại phương th

Trang 1

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

1

Abstract class

& Sealed class

Abstract class

& Sealed class

Lớp trừu tượng

lớp dẫn xuất không nhất thiết phải định nghĩa lại phương thức ảo

bắt buộc tất cả các lớp dẫn xuất phải định nghĩa lại (override) phương thức của lớp

method)

Trang 2

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

Lớp trừu tượng

từ class; VD: abstract class Tau { }

¾Trong phần thân của phương thức trừu

khai báo.

¾Phương thức trừu tượng phải được đặt

trong lớp trừu tượng

Phương thức trừu tượng

trừu tượng (abstract class)

public abstract void TênPhươngThức( );

// hoặc

abstract public void TênPhươngThức( );

Trang 3

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

VD: minh họa

5

¾Ta xây dựng 3 class:

xuất từ lớp Tau

class Tau

{ public virtual void LayThongtin()

{

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

}

}

VD:

class TauChien:Tau

{ public override void LayThongTin()

{

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

}

{ public override void LayThongTin()

{

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

}

Trang 4

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

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

7

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

}

}

VD: minh họa lớp trừu tượng

class Tau

{ public abstract void LayThongtin()

{

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

}

}

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

}

} // Error ?

Trang 5

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

VD: minh họa

9

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

}

} // Error ?

abstract class Tau

{ public abstract void LayThongtin()

{

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

}

}

VD: Sửa lại VD minh họa trên

abstract class Tau

{

public abstract void LayThongtin();

}

class TauChien:Tau

{ public override void LayThongTin()

{

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

}

}

{ public override void LayThongTin()

{

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

}

} // Error ?

Trang 6

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

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

11

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

}

} // Are there any error ? Which line do you get error ?

Sửa lại cho đúng

class Program {

static void Main(string[] args)

{

Tau [] t = new Tau[3];

t[0] = new TauChien();

t[1] = new TauChien();

t[2] = new TauChoHang();

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

t[i].LayThongTin();

}

}

Trang 7

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

Giả sử ta không xây dựng method LayThongTin trong lớp TauChien

13

abstract class Tau

{ abstract public void LayThongtin(); }

class TauChien:Tau

{ public override void LayThongTin()

{

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

}

}

{ public override void LayThongTin()

{

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

}

} // Error?

VD: khác trang 57 trong giáo trình

{

}

¾Ta xây dựng 3 class:

xuất từ lớp HinhHoc

Trang 8

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

VD: khác trang 57 trong giáo trình

15

class HinhTron : HinhHoc

{ double _bankinh;

public double BanKinh

{

get { return _bankinh; }

set { _bankinh = value; }

}

public override double DienTich()

{

return _bankinh*_bankinh*3.14 ;

}

public override double ChuVi()

{

return _bankinh*2*3.14 ;

}

}

Trang 57 trong giáo trình

Class HinhChuNhat : HinhHoc

{ double _dai, _rong;

public double ChieuDai

{ get { return _dai; }

set { _dai = value; }

}

public double ChieuRong

{ get { return _rong; }

set { _rong = value; }

}

public override double DienTich()

{ return _dai*_rong; }

public override double ChuVi()

{ return (_dai+_rong)*2; }

}

Trang 9

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

Trang 58 trong giáo trình

17

static void Main(string[ ] args)

{ HinhHoc h;

HinhTron t = new HinhTron();

t.BanKinh = 5;

Console.WriteLine("\nTHONG TIN HINH TRON");

h = t;

Console.WriteLine("Chu vi hinh tron: {0} ", h.ChuVi());

Console.WriteLine("Dien tich hinh tron:{0} \n", h.DienTich());

n.ChieuDai = 4;

n.ChieuRong = 3;

h = n;

Console.WriteLine("\nTHONG TIN HINH CHU NHAT");

Console.WriteLine("Chu vi hinh chu nhat:{0}", h.ChuVi() );

Console.WriteLine("Dien tich hinh chu nhat:{0}", h.DienTich() ); }

Ghi chú:

Phân biệt giữa từ khóa new và override

¾Từ khóa override dùng để định nghĩa lại (ghi đè) phương thức ảo (virtual) hoặc phương thức trừu tượng (abstract) của lớp cơ sở, nó được dùng với mục đích đa hình

¾Từ khóa new để che dấu thành viên của lớp

cơ sở trùng tên với thành viên của lớp dẫn xuất

Trang 10

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

Lớp cô lập (sealed class)

¾Lớp cô lập là lớp không cho các lớp khác kế thừa từ nó

sealed class TênLớp

{

// Class members here

}

¾Việc sử dụng và tạo các đối tượng theo từ khóa new bình thường như các lớp khác.

VD 1:

Sealed class Tau

{

public void LayThongTin()

{

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

}

}

class TauChoHang : Tau

{ public override void LayThongTin()

{

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

}

} // Error ?

Trang 11

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

VD 2 : sử d ng lớp cô lậ

21

class Program {

static void Main(string[ ] args)

{

SinhVien SinhVien sv = new SinhVien SinhVien();

sv.XemThongTin();

}

} } // Error ?

sealed class SinhVien

{

public void XemThongTin()

{

Console.WriteLine(“Day la sinh vien ”);

}

}

Lớp gốc: (Object class)

cả các kiểu dữ liệu đều được dẫn xuất

(Không cần phải khai báo kế thừa)

ghi đè (override) như bảng sau:

Trang 12

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

Bảng tóm tắt phương thức của lớp Object

23

đối tượng

từ điển boolEquals(object obj) public virtual So sánh các thực thể của

đối tượng boolEquals(object objA,

objectobjB)

public static So sánh các thực thể của

đối tượng bool ReferenceEquals(object

objA, object objB)

public static So sánh hai sự tham khảo

đến một đối tượng

đối tượng.

đối tượng

Destructor của Net

VD: minh họa lớp Object

public class Xe

{ // biến thành viên private lưu giá trị

private int _NhienLieu;

public Xe(int nhienlieu)

{

_NhienLieu = nhienlieu;

}

// ghi đè phương thức ToString của lớp Object

public override string ToString()

{

}

}

Trang 13

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

VD: minh họa lớp Object

public class Tester

{

static void Main(string[ ] args)

{

int i = 5;

Console.WriteLine(“Gia tri cua i la:: {0}”, i.ToString() );

Xe x = new Xe(7);

Console.WriteLine(“Nhien lieu cua Xe la: {0}”, x.ToString() ); Console.WriteLine(“Gia tri cua 5 la: {0}”, 5.ToString() );

Console.ReadLine();

}

} // Display?

Trong lớp Object phương thức ToString() được khai báo?

public virtual string ToString();

25

Q&A

Ngày đăng: 26/11/2014, 20:28

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w