public class person { public string name; } public class person { public string Name { set; get; } }
上面的兩個類,第一個person存儲的是name屬性,因爲是public屬性,能夠由其餘類訪問,第二個person的name屬性經過了set、get進行了封裝,get、set分別是可讀可寫。等價於以下代碼this
public class person { private string name; public string Name { get { return name; } set { name = value; } } }
上面的代碼中name的修飾符是private,Name是public,即在外部調用person時,並不知道你內部裝的具體是個什麼東西,他只能調用Name,對get、set進行讀和寫操做,name值並不能在其餘類中進行操做。至關因而封裝了一個類,內部的東西看不見,你只有get、set兩個接口來操做這個類。spa
在網上看到了一個很形象的比喻,person 就像銀行裏的自動取款機,你看不見裏面的錢(name),但你能用set(存錢),用get(取錢)。name是一個私有字段,是封裝在類中的,類之外的程序不能直接訪問的。C#中get、set用法中,類的set和get成員是外部程序訪問類內部屬性的惟一方法,就像你去銀行取錢,你不能直接從銀行的保險櫃裏拿錢,而是銀行營業人員把錢取出來給你的。code
除了讀和寫的做用以外,還能夠用來斷定非法字符blog
class Person//聲明一個Person類 { private string job;//聲明爲private即在其餘類中不可調用job public string Apjob//屬性後面不加()加了()就成了方法 例如Apjob() { get { return this.job;//當讀取job值時執行的代碼 } set//當設置Apjob屬性的使用執行的代碼 { if(value=="teacher")//能夠用於斷定非法字符 { this.job = "doctor"; return;//用於跳出set而不執行下面的語句 } this.job = value;//value是用戶設置的值,固定使用 } } } class Program { static void Main(string[] args) { Person p1=new Person(); p1.Apjob = "teacher";//執行set段 Console.WriteLine(p1.Apjob);//執行get段 Console.ReadKey(); } }
可看出,get、set用法中接口
一是隱藏組件或類內部的真實成員;事件
二是用來創建約束的,好比,實現「有你不行」這種約束;get
三是用來響應屬性變化事件,當屬性變化的時候作某事,只要寫在set方法裏就行。string
當你想讀出或寫入屬性的值時,存取標誌限定了被實現的語句。用於讀出屬性的值的存取標誌記爲關鍵字get,而要修改屬性的值的讀寫符標誌記爲set。it
2018.08.06class