Lập trình hướng đối tượng Giao diện (Interface) Giao diện (interface) dạng lớp trừu tượng Bình thường, xây dựng lớp, ta dùng từ khóa class Nhưng xây dựng giao diện ta phải khóa interface (thay từ khóa class) đứng trước tên lớp Trong Interface, tất phương thức (method) thuộc tính (property) khơng triển khai code mà khai báo theo dạng prototype Trong Interface, trước phương thức property khơng có từ khóa abstract public phương thức property dạng trừu tượng (abstract) có phạm vi truy cập public Một lớp abstract chứa phương thức (hay property) dạng abstarct dạng bình thường Nhưng Interface chứa phương thức (hoặc property) ngầm định abstract mà Ta khởi tạo Interface từ khóa new (giống trường hợp lớp abstract) Interface giống khuôn mẫu lớp thừa kế Khi thừa kế Interface lớp bắt buộc phải viết code cho tất phương thức property từ Interface Trong C#, lớp thừa kế từ lớp cha Nhưng lớp thừa kế từ nhiều Interface Một Interface thừa kế từ Interface khác Trong Interface không khai báo hay triển khai code cho constructor Tại lớp con, triển khai code cho phương thức thừa kế từ Interface, ta khơng cần thiết phải có từ khóa override trước tên phương thức namespace Interface_NV { public enum Certificate { TienSi = 0, ThacSi, CuNhan, KySu, CaoDang, TrungCap, KyThuatVien } public enum Position { GiamDoc = 0, PhoGiamDoc, TruongPhong, PhoPhong, } public interface I_NhanVien { void Nhap(); float TinhLuong(); //khong the khai bao bien hoac viet constructor o day String HoTen { get; set; } } class NhaKhoaHoc : I_NhanVien { private String hoten; private int namsinh; private Certificate bangcap; private Position chucvu; private int sobaibao; private int songaycong; private float bacluong; public NhaKhoaHoc() { hoten = ""; namsinh = 1900; bangcap = Certificate.KyThuatVien; chucvu = Position.PhoPhong; sobaibao = 0; songaycong = 0; bacluong = 0; } public NhaKhoaHoc(String ht, int ns, Certificate bc, Position cv, int sbb, int snc, int bl) { hoten = ht; namsinh = ns; bangcap = bc; chucvu = cv; sobaibao = sbb; songaycong = snc; bacluong = bl; } public override string ToString() { return "[" + hoten + "," + namsinh + "," + bangcap.ToString() +"," + chucvu.ToString() + "," + sobaibao + "," + songaycong + "," + bacluong + "," + TinhLuong() + " trieu dong" + "]"; } public void Nhap() { Console.Write("Nhap ho ten:"); hoten = Console.ReadLine(); Console.Write("Nhap nam sinh:"); namsinh = int.Parse(Console.ReadLine()); Console.WriteLine("Nhap mot so cua bang cap nhu sau:"); foreach (Certificate value in Enum.GetValues(typeof(Certificate))) Console.WriteLine("{0}.{1}", (int)value, value.ToString()); bangcap = (Certificate)int.Parse(Console.ReadLine()); Console.WriteLine("Nhap mot so cua chuc vu nhu sau:"); foreach (Position value in Enum.GetValues(typeof(Position))) Console.WriteLine("{0}.{1}", (int)value, value.ToString()); chucvu = (Position)int.Parse(Console.ReadLine()); Console.Write("Nhap so bai bao:"); sobaibao = int.Parse(Console.ReadLine()); Console.Write("Nhap so cong:"); songaycong = int.Parse(Console.ReadLine()); Console.Write("Nhap bac luong: "); bacluong = float.Parse(Console.ReadLine()); } public float TinhLuong() { return ((2 * bacluong) / 26) * songaycong; //2 trieu VND } public string HoTen { get { return hoten; } set { hoten = value; } } } class NhaQuanLy : I_NhanVien { private String hoten; private int namsinh; private Certificate bangcap; private Position chucvu; private int songaycong; private float bacluong; public NhaQuanLy() { hoten = ""; namsinh = 1900; bangcap = Certificate.KyThuatVien; chucvu = Position.PhoPhong; songaycong = 0; bacluong = 0; } public NhaQuanLy(String ht, int ns, Certificate bc, Position cv, int snc, int bl) { hoten = ht; namsinh = ns; bangcap = bc; chucvu = cv; songaycong = snc; bacluong = bl; } public override string ToString() { return "[" + hoten + "," + namsinh + "," + bangcap.ToString() + "," + chucvu.ToString() + "," + songaycong + "," + bacluong + "," + TinhLuong() + " trieu dong" + "]"; } public void Nhap() { Console.Write("Nhap ho ten:"); hoten = Console.ReadLine(); Console.Write("Nhap nam sinh:"); namsinh = int.Parse(Console.ReadLine()); Console.WriteLine("Nhap mot so cua bang cap nhu sau:"); foreach (Certificate value in Enum.GetValues(typeof(Certificate))) Console.WriteLine("{0}.{1}", (int)value, value.ToString()); bangcap = (Certificate)int.Parse(Console.ReadLine()); Console.WriteLine("Nhap mot so cua chuc vu nhu sau:"); foreach (Position value in Enum.GetValues(typeof(Position))) Console.WriteLine("{0}.{1}", (int)value, value.ToString()); chucvu = (Position)int.Parse(Console.ReadLine()); Console.Write("Nhap so cong:"); songaycong = int.Parse(Console.ReadLine()); Console.Write("Nhap bac luong: "); bacluong = float.Parse(Console.ReadLine()); } public float TinhLuong() { return ((2 * bacluong) / 26) * songaycong; //2 trieu VND } public string HoTen { get { return hoten; } set { hoten = value; } } } class NhanVienPTN : I_NhanVien { private String hoten; private int namsinh; private Certificate bangcap; private float luongthang; public NhanVienPTN() { hoten = ""; namsinh = 1900; bangcap = Certificate.KyThuatVien; luongthang = 0; } public NhanVienPTN(String ht, int ns, Certificate bc, float lt) { hoten = ht; namsinh = ns; bangcap = bc; luongthang = lt; } public override string ToString() { return "[" + hoten + "," + namsinh + "," + bangcap.ToString() + "," + TinhLuong() + " trieu dong" + "]"; } public void Nhap() { Console.Write("Nhap ho ten:"); hoten = Console.ReadLine(); Console.Write("Nhap nam sinh:"); namsinh = int.Parse(Console.ReadLine()); Console.WriteLine("Nhap mot so cua bang cap nhu sau:"); foreach (Certificate value in Enum.GetValues(typeof(Certificate))) Console.WriteLine("{0}.{1}", (int)value, value.ToString()); bangcap = (Certificate)int.Parse(Console.ReadLine()); Console.Write("Nhap luong thang: "); luongthang = float.Parse(Console.ReadLine()); } public float TinhLuong() { return luongthang; } public string HoTen { get { return hoten;} set { hoten = value;} } } class Program { static void Main(string[] args) { I_NhanVien nv = new NhaKhoaHoc(); //nv = new I_NhanVien(); //bao loi nv.Nhap(); Console.WriteLine(nv); Console.ReadKey(); Console.WriteLine("Doi tuong NHA KHOA HOC:"); NhaKhoaHoc nkh = new NhaKhoaHoc(); Console.WriteLine(nkh); nkh.Nhap(); Console.WriteLine(nkh); Console.WriteLine(); Console.WriteLine("Doi tuong NHA QUAN LY:"); NhaQuanLy nql = new NhaQuanLy(); Console.WriteLine(nql); nql.Nhap(); Console.WriteLine(nql); Console.WriteLine(); Console.WriteLine("Doi tuong NHAN VIEN PHONG THI NGHIEM:"); NhanVienPTN nvptn = new NhanVienPTN(); Console.WriteLine(nvptn); nvptn.Nhap(); Console.WriteLine(nvptn); Console.WriteLine(); Console.ReadKey(); } } } Cách 2: public interface I_NhanVien { void Nhap(); float TinhLuong(); //khong the khai bao bien hoac viet constructor o day String HoTen { get; set; } } class NhanVien: I_NhanVien { protected String hoten; protected int namsinh; protected Certificate bangcap; public NhanVien() { hoten = "Chua co ten"; namsinh = 1900; bangcap = Certificate.KyThuatVien; } public NhanVien(String hoten, int namsinh, Certificate bangcap) { this.hoten = hoten; this.namsinh = namsinh; this.bangcap = bangcap; } public override string ToString() { return hoten + "," + namsinh + "," + bangcap.ToString(); } public void Nhap() { Console.Write("Nhap ho ten:"); hoten = Console.ReadLine(); Console.Write("Nhap nam sinh:"); namsinh = int.Parse(Console.ReadLine()); Console.WriteLine("Nhap mot so cua bang cap nhu sau:"); foreach (Certificate value in Enum.GetValues(typeof(Certificate))) Console.WriteLine("{0}.{1}", (int)value, value.ToString()); bangcap = (Certificate)int.Parse(Console.ReadLine()); } public float TinhLuong(){ return 0; } public string HoTen { get { return hoten; } set { hoten = value; } } } ... TrungCap, KyThuatVien } public enum Position { GiamDoc = 0, PhoGiamDoc, TruongPhong, PhoPhong, } public interface I_NhanVien { void Nhap(); float TinhLuong(); //khong the khai bao bien hoac viet constructor... nvptn.Nhap(); Console.WriteLine(nvptn); Console.WriteLine(); Console.ReadKey(); } } } Cách 2: public interface I_NhanVien { void Nhap(); float TinhLuong(); //khong the khai bao bien hoac viet constructor