第一个方面: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();
}
}
}