1.声明属性
属性(property)是逻辑字段和物理方法的一个交集。属性的用法和字段完全一样。从逻辑上讲,属性就是字段。然而,编译器会将这种风格的语法自动转换成特殊的accessor方法的调用。
属性的声明方法如下:
访问修饰符    返回类型    属性名
{
  get
  {//取值代码
    return 属性值}
  set
  {//赋值代码}
}
在一个属性中,可以包含两个代码块,分别以get和set开头。其中,get块包含的是在读取属性时要执行的语句(get访问器);set块包含的是在写入属性时要执行的语句(set访问器)。属性的类型指定了由get和set这两种访问器读取和写入的数据类的类型。
当我们使用set访问器的时候,可以使用一个名为value的隐藏参数来传递要赋值的数据,也就是说,赋值属性时,编译器会把值放入到value这个变量中。下面以代码说明:
public class Animal  //Animal类
{ private string name;private int age ;//封装的字段
public string Name   //声明属性
{
get{return name;}  //get访问器
set{name=value;}  //set访问器
}
public int Age
{
get{return age;}
set{
if(value > 0 &&value<20)  
age=value;
}
public Animal(string initName,int initAge)  //构造函数
{
this.Name=initName;this.Age=initAge;
}}
2.属性的使用
 
 在表达式中使用一个属性时,要么对它进行取值,要么对它进行赋值。对于上述代码,我们可以对Age进行读取和写入。
Animal animal1=new Animal("cowcow",1);
animal.Age=2;  //赋值
Console.WriteLine(animal1.Age);  //取值
当程序运行到对属性赋值的时候,编译器会自动去调用属性的set访问器,并把值赋给value变量。
当程序运行到对属性进行取值的时候,编译器会自动去调用属性的get访问器,并把其值通过return返回。
我们还可以像使用数据字段一样使用属性。如下代码也是可以的:
animal1.Age++;  animal1.Age+=1;
编译器会自动对一个属性进行取值和赋值操作。此时,get和set访问器都将被使用到。
3.只读和只写属性
我们可以声明只包含get访问器的属性,这样可以实现属性的只读功能。
我们也可以声明只包含set访问器的属性,实现属性的只写功能。
一般,只写属性使用于对密码这样的数据进行保护。在理想情况下,需要确保安全性的应用程序允许设置密码,但不允许读取密码。在其他方面,要尽量少使用只写属性。
4.合理使用属性
属性的功能比较强大,而且具有清晰的字段风格的语法。采取正确的方式来使用属性,也可以使代码更容易理解和维护。然而,我们应当尽量多采用面向对象设计,将重点集中于对象的行为而不是他们的属性。