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

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

Đ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

OOP in C# - GV: Phạm Đình Sắc – sacvn@yahoo.com 1 L L ớ ớ p tr p tr ừ ừ u tư u tư ợ ợ ng v ng v à à L L ớ ớ p b p b ị ị kh kh ó ó a a 1 Abstract class & Sealed class Abstract class Abstract class & Sealed class & Sealed class OOP in C# - GV: Phạm Đình Sắc – sacvn@yahoo.com 2 L L ớ ớ p tr p tr ừ ừ u tư u tư ợ ợ ng ng ¾ ¾ Trong phương th Trong phương th ứ ứ c c ả ả o o (virtual method): (virtual method): l l ớ ớ p d p d ẫ ẫ n xu n xu ấ ấ t không nh t không nh ấ ấ t thi t thi ế ế t ph t ph ả ả i đ i đ ị ị nh nh ngh ngh ĩ ĩ a l a l ạ ạ i phương th i phương th ứ ứ c c ả ả o o ¾ ¾ Trong l Trong l ớ ớ p tr p tr ừ ừ u tư u t ư ợ ợ ng ng (abstract class): (abstract class): Đ Đ ể ể b b ắ ắ t bu t bu ộ ộ c c t t ấ ấ t c t c ả ả c c á á c l c l ớ ớ p d p d ẫ ẫ n xu n xu ấ ấ t ph t ph ả ả i đ i đ ị ị nh nh ngh ngh ĩ ĩ a l a l ạ ạ i i ( ( override override ) ) phương th phương th ứ ứ c c c c ủ ủ a l a l ớ ớ p p cơ s cơ s ở ở v v à à phương th phương th ứ ứ c đ c đ ó ó đư đư ợ ợ c g c g ọ ọ i l i l à à phương th phương th ứ ứ c tr c tr ừ ừ u tư u tư ợ ợ ng ( ng ( abstract abstract method method ) ) OOP in C# - GV: Phạm Đình Sắc – sacvn@yahoo.com 3 L L ớ ớ p tr p tr ừ ừ u tư u tư ợ ợ ng ng ¾ ¾ L L ớ ớ p tr p tr ừ ừ u tư u tư ợ ợ ng c ng c ó ó t t ừ ừ kh kh ó ó a a abstract trư abstract trư ớ ớ c c t t ừ ừ class; class; VD: VD: abstract class abstract class Tau Tau { } { } ¾ ¾ Trong ph Trong ph ầ ầ n thân c n thân c ủ ủ a phương th a phương th ứ ứ c tr c tr ừ ừ u u tư tư ợ ợ ng không c ng không c ó ó câu l câu l ệ ệ nh n nh n à à o o (ch (ch ỉ ỉ xây xây d d ự ự ng khuôn m ng khuôn m ẫ ẫ u) u) , t , t ứ ứ c l c l à à n n ó ó ch ch ỉ ỉ c c ó ó ph ph ầ ầ n n khai b khai b á á o. o. ¾ ¾ Phương th Phương th ứ ứ c tr c tr ừ ừ u tư u tư ợ ợ ng ph ng ph ả ả i đư i đư ợ ợ c đ c đ ặ ặ t t trong l trong l ớ ớ p tr p tr ừ ừ u tư u tư ợ ợ ng ng OOP in C# - GV: Phạm Đình Sắc – sacvn@yahoo.com 4 Phương th Phương th ứ ứ c tr c tr ừ ừ u tư u tư ợ ợ ng ng ¾ ¾ Không th Không th ể ể t t ạ ạ o ra đ o ra đ ố ố i tư i tư ợ ợ ng (new) t ng (new) t ừ ừ l l ớ ớ p p tr tr ừ ừ u tư u tư ợ ợ ng (abstract class) ng (abstract class) ¾ ¾ C C ú ú ph ph á á p phương th p phương th ứ ứ c tr c tr ừ ừ u tư u tư ợ ợ ng: ng: public public abstract abstract void void TênPh ươngTh TênPhươngTh ứ ứ c( ); c( ); // ho // ho ặ ặ c c abstract abstract public public void void TênPhươngTh TênPhươngTh ứ ứ c( ); c( ); OOP in C# - GV: Phạm Đình Sắc – sacvn@yahoo.com VD: minh h VD: minh h ọ ọ a a 5 ¾ ¾ Ta xây d Ta xây d ự ự ng 3 class: ng 3 class: 9 9 L L ớ ớ p p Tau Tau l l à à l l ớ ớ p cơ s p cơ s ở ở 9 9 L L ớ ớ p p TauChien TauChien v v à à TauChoHang TauChoHang l l à à l l ớ ớ p d p d ẫ ẫ n n xu xu ấ ấ t t t t ừ ừ l l ớ ớ p Tau p Tau class class Tau Tau { { public virtual void public virtual void LayThongtin() LayThongtin() { { Console.WriteLine( Console.WriteLine( “ “ Day la chiec Tau Day la chiec Tau ” ” ); ); } } } } OOP in C# - GV: Phạm Đình Sắc – sacvn@yahoo.com VD: VD: 6 class class TauChien:Tau TauChien:Tau { { public override public override void LayThongTin() void LayThongTin() { { Console.WriteLine( Console.WriteLine( “ “ Day la tau Chien Day la tau Chien ” ” ); ); } } } } class class TauChoHang:Tau TauChoHang:Tau { { public override public override void LayThongTin() void LayThongTin() { { Console.WriteLine( Console.WriteLine( “ “ Day la tau Cho Hang Day la tau Cho Hang ” ” ); ); } } } } OOP in C# - GV: Phạm Đình Sắc – sacvn@yahoo.com VD: VD: th th ể ể hi hi ệ ệ n t n t í í nh đa h nh đa h ì ì nh 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(); } } OOP in C# - GV: Phạm Đình Sắc – sacvn@yahoo.com VD: minh h VD: minh h ọ ọ a l a l ớ ớ p tr p tr ừ ừ u tư u tư ợ ợ ng ng 8 class class Tau Tau { { public public abstract abstract void void LayThongtin() LayThongtin() { { Console.WriteLine( Console.WriteLine( “ “ Day la chiec Tau Day la chiec Tau ” ” ); ); } } } } class class TauChien:Tau TauChien:Tau { { public override public override void LayThongTin() void LayThongTin() { { Console.WriteLine( Console.WriteLine( “ “ Day la tau Chien Day la tau Chien ” ” ); ); } } } } class class TauChoHang:Tau TauChoHang:Tau { { public override public override void LayThongTin() void LayThongTin() { { Console.WriteLine( Console.WriteLine( “ “ Day la tau Cho Hang Day la tau Cho Hang ” ” ); ); } } } } // Error ? OOP in C# - GV: Phạm Đình Sắc – sacvn@yahoo.com VD: minh h VD: minh h ọ ọ a a 9 class class TauChien:Tau TauChien:Tau { { public override public override void LayThongTin() void LayThongTin() { { Console.WriteLine( Console.WriteLine( “ “ Day la tau Chien Day la tau Chien ” ” ); ); } } } } class class TauChoHang:Tau TauChoHang:Tau { { public override public override void LayThongTin() void LayThongTin() { { Console.WriteLine( Console.WriteLine( “ “ Day la tau Cho Hang Day la tau Cho Hang ” ” ); ); } } } } // Error ? abstract abstract class class Tau Tau { { public public abstract abstract void void LayThongtin() LayThongtin() { { Console.WriteLine( Console.WriteLine( “ “ Day la chiec Tau Day la chiec Tau ” ” ); ); } } } } OOP in C# - GV: Phạm Đình Sắc – sacvn@yahoo.com VD: S VD: S ử ử a l a l ạ ạ i VD minh h i VD minh h ọ ọ a trên a trên 10 abstract abstract class class Tau Tau { { public public abstract abstract void void LayThongtin(); LayThongtin(); } } class class TauChien:Tau TauChien:Tau { { public override public override void LayThongTin() void LayThongTin() { { Console.WriteLine( Console.WriteLine( “ “ Day la tau Chien Day la tau Chien ” ” ); ); } } } } class class TauChoHang:Tau TauChoHang:Tau { { public override public override void LayThongTin() void LayThongTin() { { Console.WriteLine( Console.WriteLine( “ “ Day la tau Cho Hang Day la tau Cho Hang ” ” ); ); } } } } // Error ? OOP in C# - GV: Phạm Đình Sắc – sacvn@yahoo.com VD: VD: th th ể ể hi hi ệ ệ n t n t í í nh đa h nh đa h ì ì nh 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 ? OOP in C# - GV: Phạm Đình Sắc – sacvn@yahoo.com S S ử ử a l a l ạ ạ i cho đ i cho đ ú ú ng ng 12 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(); } } OOP in C# - GV: Phạm Đình Sắc – sacvn@yahoo.com Gi Gi ả ả s s ử ử ta không xây d ta không xây d ự ự ng method ng method LayThongTin LayThongTin trong l trong l ớ ớ p p TauChien TauChien 13 abstract abstract class class Tau Tau { { abstract abstract public void public void LayThongtin(); } LayThongtin(); } class class TauChien:Tau TauChien:Tau { { public override public override void LayThongTin() void LayThongTin() { { Console.WriteLine( Console.WriteLine( “ “ Day la tau Chien Day la tau Chien ” ” ); ); } } } } class class TauChoHang:Tau TauChoHang:Tau { { public override public override void LayThongTin() void LayThongTin() { { Console.WriteLine( Console.WriteLine( “ “ Day la tau Cho Hang Day la tau Cho Hang ” ” ); ); } } } } // Error? OOP in C# - GV: Phạm Đình Sắc – sacvn@yahoo.com VD: kh VD: kh á á c trang 57 trong gi c trang 57 trong gi á á o tr o tr ì ì nh nh 14 abstract abstract public class public class HinhHoc HinhHoc { { abstract abstract public double public double DienTich(); DienTich(); public public virtual virtual double double ChuVi() { ChuVi() { return return 0 } ; 0 } ; } } ¾ ¾ Ta xây d Ta xây d ự ự ng 3 class: ng 3 class: 9 9 L L ớ ớ p p HinhHoc HinhHoc l l à à l l ớ ớ p cơ s p cơ s ở ở 9 9 L L ớ ớ p p HinhTron HinhTron v v à à HinhChuNhat HinhChuNhat l l à à l l ớ ớ p d p d ẫ ẫ n n xu xu ấ ấ t t t t ừ ừ l l ớ ớ p p HinhHoc HinhHoc OOP in C# - GV: Phạm Đình Sắc – sacvn@yahoo.com VD: kh VD: kh á á c trang 57 trong gi c trang 57 trong gi á á o tr o tr ì ì nh 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 ; } } OOP in C# - GV: Phạm Đình Sắc – sacvn@yahoo.com Trang 57 trong gi Trang 57 trong gi á á o tr o tr ì ì nh nh 16 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; } } OOP in C# - GV: Phạm Đình Sắc – sacvn@yahoo.com Trang 58 trong gi Trang 58 trong gi á á o tr o tr ì ì nh 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()); HinhChuNhat n = new HinhChuNhat(); 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() ); } OOP in C# - GV: Phạm Đình Sắc – sacvn@yahoo.com 18 Ghi ch Ghi ch ú ú : : Phân bi Phân bi ệ ệ t gi t gi ữ ữ a t a t ừ ừ kh kh ó ó a a new new v v à à override override ¾ ¾ T T ừ ừ kh kh ó ó a a override override d d ù ù ng đ ng đ ể ể đ đ ị ị nh ngh nh ngh ĩ ĩ a l a l ạ ạ i ( i ( ghi ghi đ đ è è ) p ) p hương th hương th ứ ứ c c ả ả o o (virtual) (virtual) ho ho ặ ặ c ph ương c phương th th ứ ứ c tr c tr ừ ừ u tư u tư ợ ợ ng ng (abstract) (abstract) c c ủ ủ a l a l ớ ớ p cơ s p cơ s ở ở , n , n ó ó đư đư ợ ợ c d c d ù ù ng v ng v ớ ớ i m i m ụ ụ c đ c đ í í ch đa h ch đa h ì ì nh. nh. ¾ ¾ T T ừ ừ kh kh ó ó a a new new đ đ ể ể che d che d ấ ấ u th u th à à nh viên c nh viên c ủ ủ a l a l ớ ớ p p cơ s cơ s ở ở tr tr ù ù ng tên v ng tên v ớ ớ i th i th à à nh viên c nh viên c ủ ủ a l a l ớ ớ p d p d ẫ ẫ n n xu xu ấ ấ t. t. OOP in C# - GV: Phạm Đình Sắc – sacvn@yahoo.com 19 L L ớ ớ p cô l p cô l ậ ậ p (sealed class) p (sealed class) ¾ ¾ L L ớ ớ p cô l p cô l ậ ậ p l p l à à l l ớ ớ p p không cho c không cho c á á c l c l ớ ớ p kh p kh á á c k c k ế ế th th ừ ừ a t a t ừ ừ n n ó ó ¾ ¾ C C ú ú ph ph á á p: p: sealed class sealed class TênL TênL ớ ớ p p { { // Class members here. // Class members here. } } ¾ ¾ Vi Vi ệ ệ c s c s ử ử d d ụ ụ ng v ng v à à t t ạ ạ o c o c á á c đ c đ ố ố i tư i tư ợ ợ ng theo t ng theo t ừ ừ kh kh ó ó a new b a new b ì ì nh thư nh thư ờ ờ ng như c ng như c á á c l c l ớ ớ p kh p kh á á c. c. OOP in C# - GV: Phạm Đình Sắc – sacvn@yahoo.com VD 1: VD 1: 20 Sealed Sealed class class Tau Tau { { public void public void LayThongTin() LayThongTin() { { Console.WriteLine( Console.WriteLine( “ “ Day la tau chiec tau Day la tau chiec tau ” ” ); ); } } } } class class TauChoHang : Tau TauChoHang : Tau { { public override public override void LayThongTin() void LayThongTin() { { Console.WriteLine( Console.WriteLine( “ “ Day la tau Cho Hang Day la tau Cho Hang ” ” ); ); } } } } // Error ? [...]... một chuỗi mô tả của đối tượng Được sử dụng nếu thi hành từ điển So sánh các thực thể của đối tượng So sánh các thực thể của đối tượng bool ReferenceEquals(object public static objA, object objB) Type GetType() public object MemberwiseClone() So sánh hai sự tham khảo đến một đối tượng protected void Finalize() Trả về chi tiết kiểu của một đối tượng tạo ra một bản copy của đối tượng protected virtual... ngôn ngữ C# và tất cả các kiểu dữ liệu đều được dẫn xuất ngầm định từ lớp System.Object (Không cần phải khai báo kế thừa) Lớp Object là lớp gốc trên cây phân cấp kế thừa, nó cung cấp một số phương thức mà các lớp con có thể ghi đè (override) như bảng sau: 22 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 Phương thức Bổ từ truy cập Chức năng string ToString() public...VD 2 : sử dụng lớp cô lập sử lớ lậ sealed class SinhVien { public void XemThongTin() { Console.WriteLine(“Day la sinh vien ”); Console.WriteLine(“ } } class Program { static void Main(string[ ] args) { SinhVien sv = new SinhVien(); SinhVien sv.XemThongTin(); } } } // Error ? OOP in C# - GV: Phạm Đình Sắc – sacvn@yahoo.com 21 Lớp gốc: (Object class) Tất cả các lớp của ngôn ngữ C# và tất cả các kiểu... minh họa lớp Object public class Xe { // biến thành viên private lưu giá trị biế thà giá trị private int _NhienLieu; public Xe(int nhienlieu) Xe(int nhienlieu) { _NhienLieu = nhienlieu; nhienlieu; } // ghi đè phương thức ToString của lớp Object ghi đè thứ củ lớ public override string ToString() { return _NhienLieu.ToString(); } } 24 OOP in C# - GV: Phạm Đình Sắc – sacvn@yahoo.com VD: minh họa lớp Object... Xe la: {0}”, x.ToString() ); Console.WriteLine(“ {0}” Console.WriteLine(“Gia tri cua 5 la: {0}”, 5.ToString() ); Console.WriteLine(“ {0}” Console.ReadLine(); Console.ReadLine(); } } // Display? Trong lớp Object phương thức ToString() được khai báo? bá lớ thứ đượ public virtual string ToString(); OOP in C# - GV: Phạm Đình Sắc – sacvn@yahoo.com 25 Q&A OOP in C# - GV: Phạm Đình Sắc – sacvn@yahoo.com . 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 Type GetType() public Tr ả về chi tiết kiểu của một đối tượng. object. một chuỗi mô tả của đối tượng int GetHashTable() public virtual Được sử dụng nếu thi hành từ điển bool Equals(object obj) public virtual So sánh các thực thể của đối tượng bool Equals(object. tiết kiểu của một đối tượng. object MemberwiseClone() protected tạo ra một bản copy của đối tượng void Finalize() protected virtual Đây là một dạng Destructor của .Net OOP in C# - GV: Phạm

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

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan