get/set

目的:封裝,資料保護及隱藏

 

傳統作法:

public class Person {

        
private string _firstName;
        private string 
_lastName;
        private int 
_age;
        
        public string 
FirstName {

            
get {
                
return _firstName;
            
}
            
set {
                _firstName 
= value;
            
}
        }

        
public string LastName {

            
get {
                
return _lastName;
            
}
            
set {
                _lastName 
= value;
            
}
        }        
        
        
public int Age {

            
get {
                
return _age;
            
}
            
set {
                _age 
= value;
            
}
        }
    }

讓外部的class只能透過 Person.FirstName.get / Person.FirstName.set(value)等方式去跟 Person 物件作互動,存取資料等

因而可以在 get set function 裡設定規則或權限

==============================================================================

自動屬性 

C# 提供一個方式,讓get set程式更簡潔

限制:沒打算實現設定規則或驗證功能,只讓class裡的參數私有化

 public class Person {
    
        
public string FirstName {
            
get; set;
        
}

        
public string LastName {
            
get; set;
        
}        
        
        
public int Age {
            
get; set;
        
}
    }

注意宣告的 string 物件名稱開頭是大寫

若 FirstName 只允許內部設定 則改成

         public string FirstName {
            
get; private set;
        
}

這樣可以被外部所讀取,但外部無法設定

 

編譯器會替 Person 的 FirstName 和 LastName 和 Age 屬性產生三個 private 成員,而這種由 auto-implementation property 所產生的類別成員有個專門的稱呼,叫做 backing field。此 syntax sugar 的方便之處即在於當我們碰到一些單純需要定義類別屬性來儲存資料的場合時,用這種語法就可以省掉自行宣告私有成員的步驟(就是少打一些字啦!)。

 

 

 

 

arrow
arrow
    全站熱搜

    alansong 發表在 痞客邦 留言(0) 人氣()