C# Get Set


 

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 详细 讲解


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM