关于C#getset的简单⽤法
关于C# get set的⽂章很多,但是笔者的这篇⽂章有它的特别之处,笔者⽤简单的语⾔把c# get set讲述的⼗分明了。
C# get set释⼀:属性的访问器包含与获取(读取或计算)或设置(写)属性有关的可执⾏语句。
访问器声明可以包含get 访问器或set 访问器,或者两者均包含。声明采⽤下列形式之⼀:get {}set {} get 访问器 get 访问器体与⽅法体相似。它必须返回属性类型的值。执⾏ get 访问器相当于读取字段的值。以下是返回私有字段 name 的值的 get 访问器:
1. private string name; // the name field
2. public string Name // the Name property
3. {
4. get { return name; }
5. }
当引⽤属性时,除⾮该属性为赋值⽬标,否则将调⽤ get 访问器读取该属性的值。例如:Employee e1 = new
Employee();...Console.Write(e1.Name); // The get accessor is invoked here get 访问器必须在return或throw 语句中终⽌,并且控制不能超出访问器体。set 访问器set 访问器与返回 void 的⽅法类似。它使⽤称为 value 的隐式参数,此参数的类型是属性的类型。
在下例中,set 访问器被添加到 Name 属性:
1. public string Name
2. {
3. get { return name; }
4. set { name = value; }
5. }
当对属性赋值时,⽤提供新值的参数调⽤ set 访问器。例如:e1.Name = "Joe"; // The set accessor is invoked here在 set 访问器中对局部变量声明使⽤隐式参数名 (value) 是错误的。
C# get set备注:
属性按如下⽅式,根据所使⽤的访问器进⾏分类:只带有get 访问器的属性称为只读属性。⽆法对只读属性赋值。只带有 set 访问器的属性称为只写属性。只写属性除作为赋值的⽬标外,⽆法对其进⾏引⽤。同时带有 get 和 set 访问器的属性为读写属性。
在属性声明中,get 和set 访问器都必须在属性体的内部声明。使⽤ get 访问器更改对象的状态是⼀种错误的编程样式。例如,以下访问器在每次访问 number 字段时都产⽣更改对象状态的副作⽤。
1. public int Number
2. {
3. get { return number++; // Don't do this }
4. }
可以将 get 访问器⽤于返回字段值,或⽤于计算字段值并将其返回。例如:
1. public string Name
2.
3. get { return name != null ? name : "NA"; }
在上述代码段中,如果不对 Name 属性赋值,它将返回值 NA。⽰例 1此例说明如何访问基类中被派⽣类中具有同⼀名称的另⼀个属性隐藏的属性。
1. // property_hiding.cs
2. // Property hidingusing System;writeline方法的作用
3. public class BaseClass
4. {
5. private string name;
6. public string Name
7. {
8. get { return name; }
9. set { name = value; }
10. }
11. }
12. public class DerivedClass : BaseClass
13. {
14. private string name;
15. public new string Name // Notice the use of the new modifier
16. {
17. get { return name; }
18. set { name = value; }
19. }
20. }
21. public class MainClass
22. {
23. public static void Main()
24. {
25. DerivedClass d1 = new DerivedClass();
26. d1.Name = "John"; // Derived class property
27. Console.WriteLine("Name in the derived class is: {0}",d1.Name);
28. ((BaseClass)d1).Name = "Mary"; // Base class property
29. Console.WriteLine("Name in the base class is: {0}", ((BaseClass)d1).Name);
30. }
31. }
输出Name in the derived class is: JohnName in the base class is: Mary以下是上例中显⽰的重点:派⽣类中的属性 Name 隐藏基类中的属性 Name。在这种情况下,派⽣类的该属性声明使⽤ new 修饰符: public new string Name { ...转换 (BaseClass) ⽤于访问基类中的隐藏属性: ((BaseClass)d1).Name = "Mary";
C# get set释⼆:代码如下:
1. public class Car
2. {
3. private string color;
4. public string Color
5. {
6. get {return color; }
7. set {color=value; }
8. }
9. }
我的理解是:通过GET和SET对公有变量Color进⾏读写操作,实际就是间接更改color私有变量的值,那既然如此。为何不设color为public,让实例直接对color进⾏读写操作呢?如果有⼀天,⽼板让你把这个类改成当汽车的颜⾊改变时,同时计算⼀下汽车的《价格》属性那么如果直接对Color操作,你不是死定了? “属性”是的特⾊之⼀。
其实就相当于⽅法,尤其是中经常会⽤到get、set⽅法(的有些思想就是java的)。属性的真实作⽤不只是为了更改某个成员变量的值⽐如form的size属性在set的同时要重画form,如果你不想让⽤户对color修改,就不要提供C# get set⽅法是⾯向对象具有的set and get它的⽤途: ⼀般是对类⾥⾯的变量进⾏操作. ⽽不是直接对类的变量进⾏操作.
有⼀个很⼤的作⽤就是: 便于维护.因为:如果⼀个类的⼀个变量int a ,在其它包或命名空间类中使⽤了1000次,但是过了许久,你想把a改为b,如果直接对变量a操作的话,就得需求修改整个程序的1000处. 如果⽤属性了,就不会了,只需改这个⽅法即可public int A{ set { a = value; } get { return a; }}放为:public int B{ set { b = value; } get { return b; }}除去这个属性之外的地⽅根本不需要改变。
通过上⾯的讲解。有⼀点点明⽩了。是不是让满⾜⼀定条件让GET和SET来改变类中的私有变量。⽽不能让实例直接操作。像上⾯的代码保证了color属性的安全性。既然如此可不可以写成set{color=value*20; //value是不是相当于Color的值} 我当初和你有⼀样的想法.但是现在改变了。举个例⼦说明⼀下吧.
1. public class Car
2. {
3. public string Color
4. {
5. get {
6. if(this.viewstate["color"]!= null)
7. {
8. return this.viewstate["color"];
9. }
10. return "":
11. }
12. set { this.viewstate["color"];=value; }
13. }
14. }
在asp中通常这么使⽤.如果⽤变量的话就不好使⽤了。⽽且C# get set中可以写多个语句。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论