首页 > 代码库 > C# 论属性的重要性

C# 论属性的重要性

说到属性,那就离不开字段。什么是字段呢?大家知道C#是一门面向对象的语言。面向对象最重要的是类,类可以包括的就是字段(Field)和方法(Method)。那回来一说,什么是属性呢?属性,便是对字段的赋值和取值进行限制。如何限制呢?下面我们先谈没有属性的情况。

我们先定义一个学生类...

 1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6  7 namespace ConsoleApplication59 8 { 9     class student10     {11         /// <summary>12         /// /字段 必须设置为public,才能为其他类所赋值13         /// </summary>14         public string name;//设置姓名15         public int num;    //设置学号16         public char sex;   //设置性别17         public double grade;//设置成绩18 19         //此处省略方法代码的书写20     }21     class Program22     {23         static void Main(string[] args)24         {25             student stu = new student();26             stu.name = "MyName";27             stu.num = 100001;28             stu.sex =F;29             stu.grade = 1.5;30 31             Console.WriteLine("我是一名学生,我叫{0},我的学号是{1},我的性别是{2},我考试的成绩是{3}",stu.name,stu.num,stu.sex,stu.grade);32         }33     }34 }
View Code

由于没有使用到属性,所以字段必须设置为public才能为其他类赋值。

下面我们再来看一下属性是如何写以及用的。

 1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6  7 namespace ConsoleApplication59 8 { 9     class student10     {11         /// <summary>12         /// /字段 因为使用了属性,所以字段的限定可以是private(不写则默认为private)。13         /// </summary>14         string name;//设置姓名15         public string Name16         {17             get { return name;}18             set { name = value;}19         }20         int num;    //设置学号21         public int Num22         {23             get { return num; }24             set { num = value; }25         }26         char sex;   //设置性别27         public char Sex28         {29             get { return sex; }30             set { sex = value; }31         }32         double grade;//设置成绩33         public double Grade34         {35             get { return grade; }36             set { grade = value; }37         }38 39         //此处省略方法代码的书写40     }41     class Program42     {43         static void Main(string[] args)44         {45             student stu = new student();46             stu.Name = "MyName";47             stu.Num= 100001;48             stu.Sex =F;49             stu.Grade = 1.5;50 51             Console.WriteLine("我是一名学生,我叫{0},我的学号是{1},我的性别是{2},我考试的成绩是{3}",stu.Name,stu.Num,stu.Sex,stu.Grade);52         }53     }54 }
View Code

上下两份代码有什么不同呢?一个是把字段的限定从public改为private了,一个是在每个字段后边添加了属性。最后一个,是在赋值和取值(输出)的时候,调用了实例的属性作为输入和输出。所以应征了上面那句话,属性,就是对字段的赋值和取值进行限定。当然上述只是证明了可以通过属性来对字段进行赋值和取值。

为什么通过属性可以进行赋值和取值呢?因为属性对应有两个方法。就是set()和get()方法。set()方法用于赋值,get()方法用于取值。

当使用了属性之后,应该把字段设置为private属性,以对字段进行保护。所以只能通过属性来赋值和取值,表面上是通过属性,其实通过断点调试可以知道,赋值和取值最终还是通过属性的方法,通过字段来赋值。

 

C#最大的特点就可以进行窗体编程。窗体编程总少不了窗体间传值,下面我们来看看。如何通过属性这种东西来传值。

假设现在我们有两个窗口,一个是Form1,另一个是Form2。Form1是主窗口类,Form2是子窗口类。我们的目的是,把子窗口TextBox的值传递到主窗口的TextBox值。

在Form2里添加代码如下:

1 public string strr2 {3     get{return textbox1.Text};  4 }
View Code

现在在Form1的button控件事件里,实例化Form2,如下:

1 Form2 f2 = new Form2();2 f2.ShowDialog();3 if(f2.DialogReasult == DialogReasult.OK)4 {5    textBox1.Text = f2.strr;  6 }
View Code

如此,便可以实现窗体间的传值,(非实时)。

如何理解呢?我们把子窗体类Form2只单纯地视为一个类,比如什么学生类啊,图书类啊等等。然后把textbox1.Text视为类里的一个字段。strr视为一个字段。

通过实例化出子窗口f2,我们可以在主窗口,用对象->属性的方法,进行赋值或取值。(上边是“取值”),如此便通过用属性完成了窗体间的传值。需要注意的是,主窗体与子窗体都不用写this.Close(),便可实现关闭。

转载请注明 博客园 :http://www.cnblogs.com/gu-zhan/ 老咸

 

C# 论属性的重要性