说到属性,那就离不开字段。什么是字段呢?大家知道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 student 10 { 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 Program 22 { 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 student 10 { 11 /// <summary> 12 /// /字段 因为使用了属性,所以字段的限定可以是private(不写则默认为private)。 13 /// </summary> 14 string name;//设置姓名 15 public string Name 16 { 17 get { return name;} 18 set { name = value;} 19 } 20 int num; //设置学号 21 public int Num 22 { 23 get { return num; } 24 set { num = value; } 25 } 26 char sex; //设置性别 27 public char Sex 28 { 29 get { return sex; } 30 set { sex = value; } 31 } 32 double grade;//设置成绩 33 public double Grade 34 { 35 get { return grade; } 36 set { grade = value; } 37 } 38 39 //此处省略方法代码的书写 40 } 41 class Program 42 { 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 strr 2 { 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/ 老咸