Ví dụ đa hình
HinhHoc hh = new HinhHoc();
//TinhDienTich cua lop HinhHoc
hh.TinhDienTich();
HinhHoc htr = new HinhTron();
//TinhDienTich cua lop HinhTron
htr.TinhDienTich();
Giao diện (Interface)
Interface là một giao ước, khi một lớp thực hiện inteface thì phải tuân theo đúng những gì interface đó mô tả
Thành phần
Property
Method
Event
27 trang |
Chia sẻ: trungkhoi17 | Lượt xem: 492 | Lượt tải: 1
Bạn đang xem trước 20 trang tài liệu Bài giảng Lập trình C# - Chương 5: Kế thừa và đa hình, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
Chương 5Kế thừa và đa hìnhNội dungKhái niệm kế thừaKhái niệm đa hìnhGiao diện (interface)Kế thừaCác đối tượng có cùng chung một số đặc điểm, hành vi được nhóm lại với nhauVí dụXe đạpXe máyXe hơiXe tải Phương tiện giao thôngKế thừaVí dụ: Windows formKế thừaTạo ra các lớp mới từ việc sử dụng lại những thành phần của lớp đã cóLợi íchNhất quánThuận tiệnTái sử dụng codeKhai báo kế thừaLớp cơ sở (base class): làm cơ sở để các lớp khác kế thừaLớp nhận (derived class): kế thừa đặc điểm của lớp cơ sởKhai báoclass LopNhan : LopCoSoVí dụ:class XeDap : PhuongTienGiaoThongclass XeMay : PhuongTienGiaoThongConstructorKhông được kế thừaLớp con truy cập bằng từ khóa base class HinhHoc { public HinhHoc(double chuVi, double dienTich) { ChuVi = chuVi; DienTich = dienTich; } } class HinhTron : HinhHoc { public HinhTron(double chuVi, double dienTich) : base(chuVi, dienTich) { } }Từ khóa baseDùng để truy cập đến thành phần của lớp cơ sởMức truy cập:publicprotectedKhai báoclass { (list_of_argument){ }}class : { base.( ); }Từ khóa newDùng để khai báo phương thức ở lớp nhận khi đã có phương thức cùng tên ở lớp cơ sởVí dụpublic new void TinhDienTich() {}Đa hìnhLớp nhận kế thừa từ lớp cơ sở và có thêm những đặc tính riêng biệtTừ khóa:virtualKhai báo trong lớp cơ sở, cho biết thành phần đó có thể được nạp chồngoverrideKhai báo trong lớp nhận, cho biết thành phần đó được nạp chồngĐa hìnhKhi tham chiếu đến đối tượng:Nếu đối tượng là lớp cơ sở phương thức virtual của lớp cơ sở được thực hiệnNếu đối tượng là lớp nhận phương thức override của lớp nhận được thực hiệnVí dụ đa hình class HinhHoc { public virtual void TinhDienTich() { Console.WriteLine("Dien tich " + loaiHinh); } } class HinhTron : HinhHoc { public override void TinhDienTich() { base.TinhDienTich(); DienTich = BanKinh * BanKinh * Math.PI; } }Ví dụ đa hìnhHinhHoc hh = new HinhHoc();//TinhDienTich cua lop HinhHochh.TinhDienTich(); HinhHoc htr = new HinhTron();//TinhDienTich cua lop HinhTronhtr.TinhDienTich(); Giao diện (Interface)Interface là một giao ước, khi một lớp thực hiện inteface thì phải tuân theo đúng những gì interface đó mô tảThành phầnPropertyMethodEventInterfaceKhai báoMức truy xuất: publicCác phương thức chỉ có phần khai báo, không có phần thân interface TenInterface { //các thành phần }Ví dụinterface ILamViec{ string LamViec(string tenViec);}Ví dụ (tt)Lớp SinhVien thực hiện interface ILamViecclass SinhVien : ILamViec{ public string MSSV { get; set; } public string Nganh { get; set; } public string HoTen { get; set; } public string LamViec(string tenViec) { return "Sinh Vien " + HoTen + " dang " + tenViec; }}Ví dụ (tt)Lớp NhanVien thực hiện ILamViec class NhanVien : ILamViec { public string MSNV { get; set; } public string Phong { get; set; } public string HoTen { get; set; } public int HsLuong { get; set; } public virtual int Luong { get { return HsLuong * 800000; } } public string LamViec(string tenViec) { return "NhanVien " + HoTen + " dang " + tenViec; } }Ví dụThực thi interface static void Main(string[] args) { SinhVien a = new SinhVien(); a.HoTen = "SVA"; NhanVien b = new NhanVien(); b.HoTen = "NVB"; ILamViec lv1 = a; Console.WriteLine(lv1.LamViec("hoc bai")); ILamViec lv2 = b; Console.WriteLine(lv2.LamViec("lam bao cao"));}Ví dụKết quảInterfaceInterface có thể kế thừaMột lớp có thể thực hiện 1 hoặc nhiều interfaceKhi thực hiện interface, lớp đó phải thực hiện đầy đủ những thành phần interface đó mô tảVí dụInterface IQuanTriinterface IQuanTri { string GiaoViec(string tenViec, string tenNguoiNhan); }class SinhVien : ILamViec, IQuanTri { // các thành phần khác public string GiaoViec(string tenViec, string nguoiNhan) { return "Sinh vien " + HoTen + " dang giao viec " + tenViec + " cho " + nguoiNhan; } }Ví dụLớp QuanLy kế thừa NhanVien, thực hiện IQuanTri class QuanLy : NhanVien, IQuanTri { public string LamViec(string tenViec) { return "Quan ly " + HoTen + " dang " + tenViec; } public string GiaoViec(string tenViec, string nguoiNhan) { return "Quan ly " + HoTen + " dang giao viec " + tenViec + " cho " + nguoiNhan; } }Ví dụThực thi giao diện IQuanTriSinhVien a = new SinhVien();a.HoTen = "SVA";NhanVien b = new NhanVien();b.HoTen = "NVB";QuanLy c = new QuanLy();c.HoTen = "QLC";IQuanTri qt1 = a;Console.WriteLine(qt1.GiaoViec("truc nhat", "SVB"));IQuanTri qt2 = c;Console.WriteLine(qt2.GiaoViec("dat hang", b.HoTen));Ví dụKết quảKiểm tra thực hiện interfaceTừ khóa isTrue nếu đối tượng thực hiện interfaceFalse nếu đối tượng không thực hiện interfacekt = a is IQuanTri; //kt =truekt = b is IQuanTri; //kt =falseKiểm tra thực hiện interfaceTừ khóa asThực hiện chuyển đổi sang interfaceNếu đối tượng không thực hiện interface nullIQuanTri qt3 = a as IQuanTri;IQuanTri qt4 = b as IQuanTri; //null
Các file đính kèm theo tài liệu này:
- bai_giang_lap_trinh_c_chuong_5_ke_thua_va_da_hinh.pptx