(+84) 236.3827111 ex. 402

Ví dụ (code) về sự khác nhau giữa việc không sử dụng Đa Hình và sử dụng Đa Hình trong C#


public void Nhap()

{

Console.OutputEncoding = Encoding.UTF8;

NhanVien NV; //Dùng ĐA HìNH

while (true)

{

Console.WriteLine("**************Nhập 0 để thoát\n***************Nhập B để thêm nhân viên Biên Chế, H Nhân viên Hợp Đồng");

string nhap = Console.ReadLine().ToUpper();

if (nhap == "0") break;

if (nhap == "B")

{

Console.WriteLine("--------------------------- Nhập thông tin Nhân viên Biên Chế ------");

//NV = new NhanVienBC(); //Dùng ĐA HìNH

//NV.Nhap();

NhanVienBC nv = new NhanVienBC(); //ko dùng đa hình

nv.Nhap();

danhsach.Add(nv.MaNhanVien, nv);

}

if (nhap == "H")

{

Console.WriteLine("--------------------------- Nhập thông tin Nhân viên Hợp Đồng ------");

//NV = new NhanVienHD(); //Dùng ĐA HìNH

//NV.Nhap();

NhanVienHD nv = new NhanVienHD(); //ko dùng đa hình

nv.Nhap();

danhsach.Add(nv.MaNhanVien, nv);

}

//danhsach.Add(NV.MaNhanVien, NV); // ĐA HìNH

//danhsach.Add(nv.MaNhanVien, nv); // Không đa hình // Lỗi vì chưa biết có nhập nv vô hay chưa

}

}

public double TinhTongLuong()

{

double tongLuong = 0;

foreach (NhanVien nv in danhsach.Values)

if (nv is NhanVienBC)

{

foreach (NhanVienBC NV in danhsach.Values) //Nếu ko dùng đa hình

tongLuong = tongLuong + NV.TinhLuong();

//tongLuong = tongLuong + ((NhanVienBC)nv).TinhLuong(); //DùNG ĐA HìNH

}

// Trường hợp chưa có abstract và override thì -> Đa hình, phải Dowcasting // vì bản chất nv lúc này vẫn là NhanVien chứ ko phải NhanVienBC

else

foreach (NhanVienHD NV in danhsach.Values) //Nếu ko dùng đa hình

tongLuong = tongLuong + NV.TinhLuong();

//tongLuong = tongLuong + ((NhanVienHD)nv).TinhLuong //DùNG ĐA HìNH

return tongLuong;

}