读《精通C#》论C#2(下)

第一个方面:this的用法,除了传统的用来指示当前变量,还可以用在构造函数。让一个接受最多参数个数的构造函数做“主构造函数”,并且实现必需的验证逻辑。其余的构造函数可以使用this关键字把传入的参数转发给主构造函数,并且提供所有必需的其他参数。

第二个方面:封装,封装的核心是对象的内部数据不应该从对象实例直接访问。对象数据应该被定义为私有的,如果调用者想改变对象的状态,就要间接使用公共成员。所以更改和获取对象数据要通过get和set方法。.Net除了可以使用传统的获取方法和设置方法封装这些字段数据,还支持用属性来强制数据封装。


namespace Employee

{
    class Employee
    {
        private string empName;
        private int empID;
        private int empAge{get;set;}
        private float currPay;


        public Employee() { }


        public Employee(string name,int id,float pay,int age)
        {
            empName = name;
            empID = id;
            currPay = pay;
            empAge = age;
        }
        public Employee(string name, int id, float pay)
            : this(name, id, pay, 0) { }



        public void GiveBonus(float amount)
        {
            currPay += amount;
        }
        public void DisplayStats()
        {
            Console.WriteLine("Name:{0}", empName);
            Console.WriteLine("ID:{0}", empID);
            Console.WriteLine("Pay:{0}", currPay);
            Console.WriteLine("Age:{0}", empAge);
        }
        public string Name1
        {
            get{return empName;}
            set
            {
                if (value.Length > 15)
                    Console.WriteLine("Error!Name must b less than 15");
                else
                    empName = value;
            }
        }

        public int ID
        {
            get { return empID;}
            set { empID = value;}
        }
        public float Pay
        {
            get { return currPay;}
            set { currPay = value;}
        }
        /*
        private int Age
        {
            get { return empAge; }
            set { empAge = value; }
        }

        */
        static void Main()
        {
            Console.WriteLine("***Fun with Encapsulation*****");
            Employee emp = new Employee("Marvin",456,30000,18);
            emp.GiveBonus(1000);
            emp.DisplayStats();
            emp.Name1 = "Marv";
            emp.empAge = 20;
            emp.DisplayStats();
            Console.WriteLine("Employee is named:{0}", emp.Name1);
            Console.WriteLine("Employee is empAge:{0}", emp.empAge);
            Console.ReadLine();
        }
    }


}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值