你的位置:首页 > ASP.net教程

[ASP.net教程]C#基本语法学习(三)


1、C#属性,用如下代码定义一个属性:

1     private string name;2     public string Name3     {4       get { return name; }5       set { name = value; }6     }

  第1行定义了一个变量,这是属性所依赖的基础变量。2-6行代码定义了一个Name属性,类的使用者可以通过Name属性对类中的基础变量进行读取和修改。如:

1 Student student = new Student();2 3 student.Name = "Nick";

  在属性的使用者看来,属性就像类里面有一个具有public访问权限的变量,但事实情况并非如此。前面代码中定义的Name属性其实定义了两个特殊方法,GetName和SetName方法,分别用来读取和修改类中的私有变量Name。

  第4行代码称为属性的读取读取方法(getter)。属性的读取方法必须返回与属性相同的类型。当有代码读取属性时,读方法就被调用,并且将返回值交给调用属性的代码。

  第6行代码是属性的设置方法(setter),设置方法接受一个与属性类型相同的入口参数,并且在C#中规定这个入口参数名称为value,所以在属性的设置方法中可以不用声明直接使用value变量。当对属性进行赋值时setter方法被调用。

  C#中的属性一般具有一个get方法和一个set方法,get方法用于读取属性值,set方法用于设置属性值,但并非都是必须的,属性可以只有get方法或set方法,只有get方法的属性只可以读取,只有set方法的属性只能写入,不能读取。

  使用属性的好处:隐藏数据成员,提高程序的健壮性和灵活性。

  利用属性校验数据,通过使用属性,可以对数据进行验证,避免接受不合法的数据,提高程序健壮性。如下面例子,通过属性限制age的值。

 1   class Student 2   { 3     private string name; 4     public string Name 5     { 6       get { return name; } 7       set { name = value; } 8     } 9 10     private int age;11     public int Age12     {13       get { return age; }14       set 15       {16         if (value < 0 || value > 120)17         {18           Console.WriteLine("Invaild age!!");19 20           return;21         }22         else23         {24           age = value;25 26           Console.WriteLine("Age set to: {0}", age);27         }28       }29     }30   }31 32     static void Main(string[] args)33     {34       Student student = new Student();35 36       Console.WriteLine("Set student name : Nick");37       student.Name = "Nick";38       Console.WriteLine("Set student age: 25");39       student.Age = 25;40       Console.WriteLine("Student " + student.Name + "'s age is {0}!", student.Age);41 42       Console.WriteLine("Set student age: 140");43       student.Age = 140;44 45       Console.WriteLine("Student " + student.Name + "'s age is {0}!", student.Age);46 47       Console.WriteLine("Press enter to exit!");48       Console.ReadLine();49     }

  运行结果如下:

  

1 Set student name : Nick2 Set student age: 253 Age set to: 254 Student Nick's age is 25!5 Set student age: 1406 Invaild age!!7 Student Nick's age is 25!8 Press enter to exit!

 

  属性其实是一种特殊的方法,而不是一个变量。有时候属性的确是对类中成员变量的封装,但很多时候也不是这样。