C# Get Set

賈天昊發表於2019-02-17

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 詳細 講解

相關文章