日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
經(jīng)典講解C#getset

C# get set函數(shù)很常用,但是用好還是需要很多經(jīng)驗的,下面的文章就是幫你積累C# get set函數(shù)經(jīng)驗的。

孝昌網(wǎng)站制作公司哪家好,找成都創(chuàng)新互聯(lián)公司!從網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、成都響應(yīng)式網(wǎng)站建設(shè)公司等網(wǎng)站項目制作,到程序開發(fā),運營維護(hù)。成都創(chuàng)新互聯(lián)公司從2013年創(chuàng)立到現(xiàn)在10年的時間,我們擁有了豐富的建站經(jīng)驗和運維經(jīng)驗,來保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選成都創(chuàng)新互聯(lián)公司。

C# get set不提倡將域的保護(hù)級別設(shè)為 public而使用戶在類外任意操作--那樣太不OO,或者具體點說太不安全!對所有有必要在類外可見的域,C#推薦采用屬性來表達(dá)。屬性不表示存儲位置,這是屬性和域的根本性的區(qū)別。下面是一個典型的屬性設(shè)計:

 
 
 
  1. using System;  
  2. class MyClass  
  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. MyClass MyObject=new MyClass();  
  16. Console.Write(MyObject.Integer);  
  17. MyObject.Integer++;  
  18. Console.Write(MyObject.Integer);  
  19. }  

一如我們期待的那樣,程序輸出0 1。我們可以看到屬性通過對方法的包裝向程序員提供了一個友好的域成員的存取界面。這里的value是C# get set的關(guān)鍵字,是我們進(jìn)行屬性操作時的set的隱含參數(shù),也就是我們在執(zhí)行屬性寫操作時的右值。

屬性提供了只讀(get),只寫(set),讀寫(get和 set)三種接口操作。對域的這三種操作,我們必須在同一個屬性名下聲明,而不可以將它們分離,看下面的實現(xiàn):

 
 
 
  1. class MyClass  
  2. {  
  3. private string name;  
  4. public string Name  
  5. {  
  6. get { return name; }  
  7. }  
  8. public string Name  
  9. {  
  10. set { name = value; }  
  11. }  
  12. }  

上面這種分離Name屬性實現(xiàn)的方法是錯誤的!我們應(yīng)該像前面的例子一樣將他們放在一起。值得注意的是三種屬性(只讀,只寫,讀寫)被C# get set認(rèn)為是同一個屬性名,看下面的例子:

 
 
 
  1. class MyClass  
  2. {  
  3. protected int num=0;  
  4. public int Num  
  5. {  
  6. set 
  7. {  
  8. num=value;  
  9. }  
  10. }  
  11. }  
  12. class MyClassDerived: MyClass  
  13. {  
  14. new public int Num  
  15. {  
  16. get 
  17. {  
  18. return num;  
  19. }  
  20. }  
  21. }  
  22. class Test  
  23. {  
  24. public static void Main()  
  25. {  
  26. MyClassDerived MyObject = new MyClassDerived();  
  27. //MyObject.Num= 1; //錯誤 !  
  28. ((MyClass)MyObject).Num = 1;  
  29. }  
  30. }  

我們可以看到MyClassDerived中的屬性Num-get{}屏蔽了MyClass中屬性Num-set{}的定義。

當(dāng)然屬性遠(yuǎn)遠(yuǎn)不止僅僅限于域的接口操作,屬性的本質(zhì)還是方法,我們可以根據(jù)程序邏輯在屬性的提取或賦值時進(jìn)行某些檢查,警告等額外操作,看下面的例子:

 
 
 
  1. class MyClass  
  2. {  
  3. private string name;  
  4. public string Name  
  5. {  
  6. get { return name; }  
  7. set 
  8. {  
  9. if (value==null)  
  10. name="Microsoft";  
  11. else 
  12. name=value;  
  13. }  
  14. }  

由于屬性的方法的本質(zhì),屬性當(dāng)然也有方法的種種修飾。屬性也有5種存取修飾符,但屬性的存取修飾往往為public,否則我們也就失去了屬性作為類的公共接口的意義。除了方法的多參數(shù)帶來的方法重載等特性屬性不具備外, virtual, sealed, override, abstract等修飾符對屬性與方法同樣的行為,但由于屬性在本質(zhì)上被實現(xiàn)為兩個方法,它的某些行為需要我們注意??聪旅娴睦樱?/p>

 
 
 
  1. abstract class A  
  2. {  
  3. int y;  
  4. public virtual int X  
  5. {  
  6. get { return 0; }  
  7. }  
  8. public virtual int Y  
  9. {  
  10. get { return y; }  
  11. set { y = value; }  
  12. }  
  13. public abstract int Z { get; set; }  
  14. }  
  15. class B: A  
  16. {  
  17. int z;  
  18. public override int X  
  19. {  
  20. get { return base.X + 1; }  
  21. }  
  22. public override int Y  
  23. {  
  24. set { base.Y = value < 0? 0: value; }  
  25. }  
  26. public override int Z  
  27. {  
  28. get { return z; }  
  29. set { z = value; }  
  30. }  

這個例子集中地展示了屬性在繼承上下文中的某些典型行為。這里,類A由于抽象屬性Z的存在而必須聲明為abstract。子類B中通過base關(guān)鍵字來引用父類A的屬性。類B中可以只通過Y-set便覆蓋了類A中的虛屬性。

靜態(tài)屬性和靜態(tài)方法一樣只能存取類的靜態(tài)域變量。我們也可以像做外部方法那樣,聲明外部屬性。以上就是對C# get set的簡單介紹。


當(dāng)前文章:經(jīng)典講解C#getset
文章來源:http://m.5511xx.com/article/codojjj.html