欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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