c 中get set 的使用

2022-09-02 18:06:11 字數 3446 閱讀 2614

在早期學習c#的過程中,經常遇到這樣的語句:

public string studentname

getset

當時也不是很明白為什麼要這樣?學深了c#後,又沒法對其做乙個總結。今天看了《visual c#.net程式設計教程》這本書,總結得不錯,做下筆記:在許多物件導向程式設計語言中,屬性 } }

上面**中定義了乙個屬性studentname,它包含get訪問器和set訪問器。屬性studentname封裝了類student中的字段stuname,字段如果沒有加訪問控制符,被預設為private,外界不能直接訪問它,現在外界可以通過studentnamee屬性自由地訪問 stuname欄位了。

屬性的get和set都是可執行的程式語句組合,具有行為的特點;而使用具有get訪問器和set訪問器的屬性時候就像使用字段一樣,即可以作為左值接受資料,又可以作為右值輸出資料,系統正是按照屬性出現在語句中的位置,自動地選擇是呼叫get還是呼叫set。

屬性的讀寫控制

屬性中的get和set可以只用乙個,如果只有get而沒有set,那麼這個屬性只可讀出,不可寫入;如果只有set而沒有get,那麼這個屬性是只寫入,不可讀出。

在屬性中完成更多功能

既然get和set是程式,那當然可以做更多的事情。乙個合理的分工是:設計字段是為了便於內部方法使用,而盡量與外界隔絕;設計屬性考慮的是方便外界的使用,但是不讓外界知道的資料一律不給。

具體說明:

set訪問器與返回void的方法類似。它使用稱為value的隱式引數,此引數的型別是屬性的型別。在下例中,set訪問器被新增到name屬性:

public string name 

set

}

當對屬性賦值時,用提供新值的引數呼叫set訪問器。例如:

e1.name = "joe";   // the set accessor is invoked here
set訪問器中對區域性變數宣告使用隱式引數名 (value) 是錯誤的。

備註屬性按如下方式,根據所使用的訪問器進行分類:

在屬性宣告中,getset訪問器都必須在屬性體的內部宣告。

使用get訪問器更改物件的狀態是一種錯誤的程式設計樣式。例如,以下訪問器在每次訪問number欄位時都產生更改物件狀態的***。

public int number 

}

可以將get訪問器用於返回字段值,或用於計算字段值並將其返回。例如:

public string name 

}

在上述**段中,如果不對name屬性賦值,它將返回值na

示例 1

此例說明如何訪問基類中被派生類中具有同一名稱的另乙個屬性隱藏的屬性。

// property_hiding.cs

// property hiding

using system;

public class baseclass 

set }}

public class derivedclass : baseclass 

set }}

public class mainclass 

",d1.name);

((baseclass)d1).name = "mary"; // base class property

console.writeline("name in the base class is: ",

((baseclass)d1).name);   }}

輸出name in the derived class is: john

name in the base class is: mary

以下是上例中顯示的重點: 

派生類中的屬性 name 隱藏基類中的屬性 name。在這種情況下,派生類的該屬性宣告使用 new 修飾符: 

public new string name 

//這裡是給私有屬性name賦值 

get//這裡取出私有屬性name的值 

} } 

c#在定義類時,通常要把類中宣告的物件封裝起來,使得外界不能訪問這個屬性。上述**中如果去掉set部分,則外界只能讀取name的值,如果去掉get部分,則只能給name賦值。這樣就可以控制外界對私有屬性name的訪問許可權了,這種寫法是c#的乙個特性

當然你也可以通過自己建立函式來對name進行取值和賦值,但這樣就顯得比較麻煩了。

屬性與普通變數不同就在於, 普通變數就是放在屋子裡的東西, 是什麼樣明明白白. 而屬性則是在屋子的門口放了個守門人, 你拿東西放東西要經過他.

這個守門人就是屬性訪問器, 拿東西就是 get, 放東西就是 set. 怎麼拿怎麼放是它說了算, 雖然你覺得好像就是直接拿直接放差不多. 

get set 就是對外的介面 ,一般在例項中訪問成員資料需要這個成員資料的訪問方式為public ,現在c#很高階了,get 就是獲取,set 就是設定,但是它提供了跟好的收縮性,對get 和set 可以單獨設定訪問許可權 比如你對某個成員資料只能讀取或者只寫,或者只有派生類可以訪問等。。。 相對以前來說,沒有屬性訪問器,需要通過函式來呼叫私有成員資料,屬性提供了高效的訪問模式和簡單的書寫。 

就是為了安全啊~~

欄位是你具體要操作的資料所以他的值不能出錯,可是你又不能避免使用者犯錯~~

為了安全就用屬性來給字段賦值,因為 在set中你可以對資料的安全進行驗證, 

get就更簡單了驗證完資料了就要把值給了字段所以要get 

set的中文意思是「設定」; 

get的中文意思是「獲得」;

補充:

get 和 set 會在相應的時候自動呼叫 

主要是為了隱藏程式內的資料結構時用 

get是獲取該屬性的值, 

set設定該屬性的值。 

在用set時有乙個特殊的變數value 

就是設定屬性時的值

value 隱式引數,用於設定訪問器以及新增或移除事件處理程式。

對類的屬性進行 設定 

比如用類名.屬性=「」賦值 set作用 

變數=類名.屬性 取值 get 作用

c 中get set 的使用

在早期學習c 的過程中,經常遇到這樣的語句 public string studentname get set 當時也不是很明白為什麼要這樣?學深了c 後,又沒法對其做乙個總結。今天看了 visual c net程式設計教程 這本書,總結得不錯,做下筆記 在許多物件導向程式設計語言中,屬性 上面 中...

《C 中get set的用法》

c 中get set 的用法 c get set用法中,get是讀取屬性時進行的操作,set是設定屬性時進行的操作。定義乙個屬性如果只有 get,這個屬性就是唯讀的。同樣,只有 set,屬性就是只寫的,當然只寫的屬性是沒有任務意義的。假設類是乙個銀行,既能存錢也能取錢.money就像銀行裡的自動訪問...

C 中get,set語句的使用方法

set語句的使用方法 set 語句 是通過value 識別符號來進行賦值的 可以包含任何語句 甚至沒有語句 struct time private int hour,minute,second time lunch new time lunch.hour 12 當寫乙個屬性的時候,屬性的set語句自...