c#不提倡使用者將字首設定為public, 為防止使用者任意對變數讀寫,引入屬性概念,而get與set方法為屬性內的限制(約束)條件。
比如需要編寫乙個類,裡面有年齡屬性:
例1:
public
class a
例2:
public
class b
內增加對age操作的限制條件, get為讀取,set為寫入條件
public
int age
set//如果對age進行賦值,set內的表示式限定了age能賦值的範圍}}
b b = new b();
b.age = -1; //-1<0,所以賦值失敗
b.age = 1; // 1>0,所以age = 1;
綜上所述,age變數只是用來限制age的可賦值內容, 可為何有些地方有
public int age , set {} },這樣裡面是空的,這樣做是為什麼呢。
例3:
private
string name; // 姓名字段
// the name property
public
string name
}
get{}訪問器必須返回屬性型別的值,執行get訪問器就相當於讀取字段(name)的值,get訪問器必須在return或throw語句終止;
set{}訪問器與返回void的方法類似,此引數使用乙個叫value的隱式引數,value型別與屬性(name)的型別相同;
public
string name
set
}my.name = "lilei";//通過呼叫屬性(name),給私有變數name賦值為lilei
屬性的命名:
只帶有 get 訪問器的屬性稱為唯讀屬性。無法對唯讀屬性賦值。
只帶有 set 訪問器的屬性稱為只寫屬性。只寫屬性除作為賦值的目標外,無法對其進行引用。
同時帶有 get 和 set 訪問器的屬性為讀寫屬性。
在屬性宣告中,get 和 set 訪問器都必須在屬性體的內部宣告。
set and get的用途: 一般是對類裡面的變數進行操作. 而不是直接對類的變數進行操作.
有乙個很大的作用就是: 便於維護.
例4:
如果乙個類的乙個變數int a ,在其它包或命名空間類中使用了1000次,但是過了許久,你想把a改為b,
如果直接對變數a操作的話,就得需求修改整個程式的1000處. 如果用屬性了,就不會了,只需改這個方法即可
public
int a
get }
//改為:
public
int b
get }
//除去這個屬性之外的地方根本不需要改變
private
string strname;
public
string strname
set
}
與public string strname;
的區別:
1.在封裝資料庫欄位的時候非常有用;
2.封裝以後,比沒有封裝更加方便。如果你要做條件判斷、轉換等 操作,在get、set你做會更方便。而且還保護了原欄位。
假設_username是資料庫字段,如果程式設計師不想公開這個屬性,而是做一些變換,這樣資料安全性更高。
public
string username
set
}
c 中 get與set的用法
1 當引用屬性時,除非該屬性為賦值目標,否則將呼叫get訪問器讀取該屬性的值。例如 employeee1 newemployee console.write e1.name thegetaccessorisinvokedhereget 訪問器必須在return或throw語句中終止,並且控制不能超出...
關於C 中的get與set函式
在程式中經常碰到get set,不甚明白,在網上查詢時也說的迷迷糊糊,所以整理下,以學的明白透徹點。有兩個類person public class person public class person 第乙個型別的name屬性未封裝,其name屬性直接通過public關鍵字暴露給系統中的其他類了,而...
c 中get與set的用法詳解
在程式中經常碰到get set,不甚明白,在網上查詢時也說的迷迷糊糊,所以整理下,以學的明白透徹點。有兩個類person public class person public class person 第乙個型別的name屬性未封裝,其name屬性直接通過public關鍵字暴露給系統中的其他類了,而...