30/09/2018, 18:11

Cách sử dụng đa kế thừa và đa hình trong C#?

cho e hỏi 2 cái đó sửa dụng sao ạ tại sao e xài thừa kế rồi nhưng k gọi ra được, vấn đề 2 là chạy mảng thì nó chỉ chạy được mảng cha ban đầu còn mảng con thừa kế nó k chạy. ai bít chỉ e với

class Program
{
class Thongtin
    {
        private string name;
        private int year;
        private string bangcap;
        public Thongtin()
        {
            name = null;
            year = 0;
            bangcap = null;
        }
        public Thongtin(string n,int y,string b)
        {
            name = n;
            year = y;
            bangcap = b;
        }
        public Thongtin(Thongtin th)
        {
            name = th.name;
            year = th.year;
            bangcap = th.bangcap;
        }
        public void nhap()
        {
            Console.Write("NHAP HO TEN: ");
            name = Console.ReadLine();
            Console.Write("NHAP NAM SINH: ");
            year = int.Parse(Console.ReadLine());
            Console.Write("NHAP BANG CAP: ");
            bangcap = Console.ReadLine();
        }
        public void xuat()
        {
            Console.WriteLine("HO TEN: {0}", name);
            Console.WriteLine("NAM SINH: {0}", year);
            Console.WriteLine("HO TEN: {0}", name);
        }
    }
	 class NQL : Thongtin // := extends ben java, dung de ke thua
{
    private string chucvu;
    private int songay;
    private double bacluong;
    public NQL()
    {
        chucvu = null;
        songay = 0;
        bacluong = 0;
    }
    //base:ke thua giong nhu super ben java
    public NQL(string name, int year, string bangcap, string c, int s, double bl)
        : base(name, year, bangcap)
    {
        chucvu = c;
        songay = s;
        bacluong = bl;
    }
    public NQL(NQL nq)
    {
        chucvu = nq.chucvu;
        songay = nq.songay;
        bacluong = nq.bacluong;
    }
    public void nhap()
    {
        base.nhap();//goi ham ke thua cua thong tin
        Console.Write("NHAP CHUC VU: ");
        chucvu = Console.ReadLine();
        Console.Write("NHAP SO NGAY CONG: ");
        songay = int.Parse(Console.ReadLine());
        Console.Write("NHAP BAC LUONG: ");
        bacluong = double.Parse(Console.ReadLine());
    }
    public void xuat()
    {
        base.xuat();//goi ham ke thua cua thong tin
        Console.WriteLine("CHUC VU: {0}", chucvu);
        Console.WriteLine("SO NGAY CONG: {0}", songay);
        Console.WriteLine("BAC LUONG: {0}", bacluong);
        Console.WriteLine("Luong: {0}", Tinhluong());
    }
    public double Tinhluong()
    {
        double tinhluong = songay * bacluong;
        return tinhluong;
    }
}
class NKH:NQL
{
    private int sobai;
    public NKH()
    {
        sobai = 0;
    }
    public NKH(string name, int year, string bangcap, string chucvu, int songay, double bacluong, int sb) : base(name, year, bangcap, chucvu, songay, bacluong)
    {
        sobai = sb;
    }
    public NKH(NKH nk)
    {
        sobai = nk.sobai;
    }
    public void nhap()
    {
        base.nhap();
        Console.Write("NHAP SO BAI DA CONG BO: ");
        sobai = int.Parse(Console.ReadLine());
    }
    public void xuat()
    {
        base.xuat();
        Console.WriteLine("SO BAI DA CONG BO: {0}", sobai);
        base.Tinhluong();
    }
}
 class NVPTN : Thongtin
{
    private double luong;
    public NVPTN()
    {
        luong = 0;
    }
    public NVPTN(string name, int year, string bangcap, double l)
        : base(name, year, bangcap)
    {
        luong = l;
    }
    public NVPTN(NVPTN nv)
    {
        luong = nv.luong;
    }
    public void nhap()
    {
        base.nhap();
        Console.Write("NHAP LUONG: ");
        luong = double.Parse(Console.ReadLine());
    }
    public void xuat()
    {
        base.xuat();
        Console.WriteLine("LUONG: {0}", luong);
        Console.WriteLine("Luong: {0}", luong);
    }
    
} 
    class Demo
    {
        static void Main(string[] args)
        {
            System.Console.OutputEncoding = Encoding.UTF8;
            Thongtin[] DSTT;
            int ntt = 100;
            int n = 0;
            DSTT = new Thongtin[ntt];
            int menu = 1;
            do
            {
                Console.WriteLine("1.NHÀ KHOA HỌC ");
                Console.WriteLine("2.NHÀ QUẢN LÝ ");
                Console.WriteLine("3.NHÂN VIÊN PHÒNG THÍ NGHIỆM ");
                Console.WriteLine("4.XUẤT THÔNG TIN ");
                Console.WriteLine("5.TỔNG LƯƠNG ĐÃ TRẢ ");
                Console.WriteLine("6.THOÁT ");
                Console.Write("===BẠN CHỌN===: ");
                menu = int.Parse(Console.ReadLine());
                switch (menu)
                {
                    case 1:
                        {
                            DSTT[n] = new NQL();
                            DSTT[n].nhap();
                            n++;
                            break;

                        }
                    case 2:
                        {
                            DSTT[n] = new NKH();
                            DSTT[n].nhap();
                            n++;
                            break;
                        }
                    case 3:
                        {
                            DSTT[n] = new NVPTN();
                            DSTT[n].nhap();
                            break;
                        }
                    case 4:
                        {
                            for (int i = 0; i < n; i++)
                            {
                                DSTT[i].xuat();
                            }
                            break;
                        }
                    default: menu = 0; break;
                }
            } while (menu != 0);
            Console.ReadLine();
        }
    }
}indent preformatted text by 4 spaces
Đăng Lê viết 20:16 ngày 30/09/2018

Nhìn sơ rối qua! nhưng thấy điều này: Lớp Cơ sở (lớp được kế thừa) phải là lớp ảo (abstract)

Bài liên quan
0