C# Get Set
程序员文章站
2022-04-24 18:21:48
C# get set不提倡将域的保护级别设为 public而使用户在类外任意操作--那样太不OO,或者具体点说太不安全!对所有有必要在类外可见的域,C#推荐采用属性来表达。属性不表示存储位置,这是属性和域的根本性的区别。下面是一个典型的属性设计: 属性提供了只读(get),只写(set),读写(ge ......
c# get set不提倡将域的保护级别设为 public而使用户在类外任意操作--那样太不oo,或者具体点说太不安全!对所有有必要在类外可见的域,c#推荐采用属性来表达。属性不表示存储位置,这是属性和域的根本性的区别。下面是一个典型的属性设计:
1 using system; 2 class demo 3 { 4 int integer; 5 public int integer 6 { 7 get {return integer;} 8 set {integer=value;} 9 } 10 } 11 class test 12 { 13 public static void main() 14 { 15 demo test =new demo(); 16 console.write(test .integer); 17 test .integer++; 18 console.write(test .integer); 19 } 20 }
属性提供了只读(get),只写(set),读写(get和 set)三种接口操作。对域的这三种操作,我们必须在同一个属性名下声明,而不可以将它们分离,看下面的实现:
class demo { private string name; public string name { get { return name; } } public string name { set { name = value; } } }
上面这种分离name属性实现的方法是错误的!我们应该像前面的例子一样将他们放在一起。值得注意的是三种属性(只读,只写,读写)被c# get set认为是同一个属性名,看下面的例子:
class demo { protected int num=0; public int num { set { num=value; } } } class demo: demo { new public int num { get { return num; } } } class test { public static void main() { demo test = new demo(); //test .num= 1; //错误 ! ((demo )test ).num = 1; } }
virtual, sealed, override, abstract等修饰符对属性与方法同样的行为
abstract class a { int y; public virtual int x { get { return 0; } } public virtual int y { get { return y; } set { y = value; } } public abstract int z { get; set; } } class b: a { int z; public override int x { get { return base.x + 1; } } public override int y { set { base.y = value < 0? 0: value; } } public override int z { get { return z; } set { z = value; } } }
c# get set 详细 讲解
下一篇: Java 集合类Hashmap