首页 > 代码库 > 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 }
由于没有使用到属性,所以字段必须设置为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 }
上下两份代码有什么不同呢?一个是把字段的限定从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 }
现在在Form1的button控件事件里,实例化Form2,如下:
1 Form2 f2 = new Form2();2 f2.ShowDialog();3 if(f2.DialogReasult == DialogReasult.OK)4 {5 textBox1.Text = f2.strr; 6 }
如此,便可以实现窗体间的传值,(非实时)。
如何理解呢?我们把子窗体类Form2只单纯地视为一个类,比如什么学生类啊,图书类啊等等。然后把textbox1.Text视为类里的一个字段。strr视为一个字段。
通过实例化出子窗口f2,我们可以在主窗口,用对象->属性的方法,进行赋值或取值。(上边是“取值”),如此便通过用属性完成了窗体间的传值。需要注意的是,主窗体与子窗体都不用写this.Close(),便可实现关闭。
转载请注明 博客园 :http://www.cnblogs.com/gu-zhan/ 老咸
C# 论属性的重要性