【C#】Class類別–子類別覆寫父類別同名的屬性與方法

設定父類別可以被覆寫的方法為virtual
設定子類別覆寫父類別同名的方法為override
如果子類別想加強父類別的方法,卻不想重新撰寫父類別中相同程式,只要在子類別中的方法呼叫父類別,並加上base語法(base.方法或base.屬性)即可。

延伸Class(類別)應用範例作強化

程式碼:
   class Employee // 定義Employee員工類別
    {
        //_salary宣告為Protected保護層級,此欄位可以在子類別中使用
        protected int _salary;
        //底薪20000~40000
        public virtual int Salary
        {
            get
            {
                return _salary;
            }
            set
            {
                if ((value >= 20000) & (value <= 40000))
                {
                    _salary = value;
                }
                else
                {
                    _salary = 20000;
                }
            }
        }
        public virtual void ShowTotal()//ShowTotal方法允許被覆寫
        {
            Console.WriteLine("底薪:{0}", Salary);
        }
    }
    // 定義Manager經理子類別繼承自Employee員工父類別
    class Manager : Employee
    {
        public int Bonus { get; set; }
        
        //覆寫父類別 底薪30000~60000
        public override int Salary
        {
            get
            {
                return _salary; //使用父類別的_salary
            }
            set
            {
                if ((value >= 30000) && (value <= 60000))
                {
                    _salary = value;
                }
                else
                {
                    _salary = 30000;
                }
            }
        }
        public override void ShowTotal()//覆寫Employee的ShowTotal方法
        {
            base.ShowTotal();//呼叫父類別Employee的ShowTotal方法
            Console.WriteLine("薪水+獎金共:{0}", Bonus + Salary);
        }
    }
    // 定義Sale業務子類別繼承自Employee員工父類別
    class Sale : Employee
    {
        public double Bonus { get; set; }

        //覆寫父類別 底薪17688 最低工資
        public override int Salary
        {
            get
            {
                return _salary; //使用父類別的_salary
            }
            set
            {
                _salary = 17688;
            }
        }
        public override void ShowTotal()//覆寫Employee的ShowTotal方法
        {
            base.ShowTotal();//呼叫父類別Employee的ShowTotal方法
            Bonus = Bonus * 0.05;
            Console.WriteLine("薪水+獎金共:{0}", Bonus + Salary);
        }
    }       

       static void Main(string[ ] args)
       {
            Employee tom = new Employee();
            tom.Salary = 40000;
            Console.WriteLine("tom員工薪水{0}", tom.Salary);
            tom.ShowTotal();
            Console.WriteLine("===================");
            Console.WriteLine();

            Manager peter = new Manager();  // 建立Manager經理類別peter物件
            peter.Salary = 70000;
            Console.WriteLine("peter經理薪水{0}", peter.Salary);  // 顯示薪水
            peter.Bonus = 30000;
            Console.WriteLine("peter經理獎金{0}", peter.Bonus);  // 顯示獎金
            peter.ShowTotal();  // 顯示薪水+獎金
            Console.WriteLine("===================");
            Console.WriteLine();
 
            Sale jason = new Sale();    // 建立Sale業務類別jason物件
            jason.Salary = 70000;
            Console.WriteLine("jason業務薪水{0}", jason.Salary); // 顯示薪水
            jason.Bonus = 30000;
            Console.WriteLine("jason業務獎金{0}", jason.Bonus); // 顯示獎金
            jason.ShowTotal(); // 顯示薪水+獎金
            Console.Read();
       }

執行畫面:





留言

這個網誌中的熱門文章

【ASP】日期轉換(西元<-->民國)

【VB】使用NPOI元件來匯出Excel--DataTableToExcel

【SQL】符號切割字串變成多欄