偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

淺析C# get set的簡(jiǎn)單用法

開發(fā) 后端
在屬性聲明中,C# get set訪問器都必須在屬性體的內(nèi)部聲明。使用get訪問器更改對(duì)象的狀態(tài)是一種錯(cuò)誤的編程樣式。

關(guān)于C# get set的文章很多,但是筆者的這篇文章有它的特別之處,筆者用簡(jiǎn)單的語(yǔ)言把c# get set講述的十分明了。

C# get set釋一:屬性的訪問器包含與獲取(讀取或計(jì)算)或設(shè)置(寫)屬性有關(guān)的可執(zhí)行語(yǔ)句。

訪問器聲明可以包含get 訪問器或set 訪問器,或者兩者均包含。聲明采用下列形式之一:get {}set {} get 訪問器  get 訪問器體與方法體相似。它必須返回屬性類型的值。執(zhí)行 get 訪問器相當(dāng)于讀取字段的值。以下是返回私有字段 name 的值的 get 訪問器:

  1. private string name;   // the name field  
  2. public string Name   // the Name property  
  3. {     
  4.     get    {      return name;    }  
  5. }   

 當(dāng)引用屬性時(shí),除非該屬性為賦值目標(biāo),否則將調(diào)用 get 訪問器讀取該屬性的值。例如:Employee e1 = new Employee();...Console.Write(e1.Name);   // The get accessor is invoked here  get 訪問器必須在return或throw 語(yǔ)句中終止,并且控制不能超出訪問器體。set 訪問器set 訪問器與返回 void 的方法類似。它使用稱為 value 的隱式參數(shù),此參數(shù)的類型是屬性的類型。

在下例中,set 訪問器被添加到 Name 屬性:

  1.  public string Name  
  2.  {     
  3.      get    {       return name;    }    
  4.      set    {      name = value;    }  
  5. }  

當(dāng)對(duì)屬性賦值時(shí),用提供新值的參數(shù)調(diào)用 set 訪問器。例如:e1.Name = "Joe";   // The set accessor is invoked here在 set 訪問器中對(duì)局部變量聲明使用隱式參數(shù)名 (value) 是錯(cuò)誤的。

C# get set備注:

屬性按如下方式,根據(jù)所使用的訪問器進(jìn)行分類:只帶有g(shù)et 訪問器的屬性稱為只讀屬性。無(wú)法對(duì)只讀屬性賦值。只帶有 set 訪問器的屬性稱為只寫屬性。只寫屬性除作為賦值的目標(biāo)外,無(wú)法對(duì)其進(jìn)行引用。同時(shí)帶有 get 和 set 訪問器的屬性為讀寫屬性。

在屬性聲明中,get 和set 訪問器都必須在屬性體的內(nèi)部聲明。使用 get 訪問器更改對(duì)象的狀態(tài)是一種錯(cuò)誤的編程樣式。例如,以下訪問器在每次訪問 number 字段時(shí)都產(chǎn)生更改對(duì)象狀態(tài)的副作用。

  1. public int Number   
  2. {     
  3.    get   {      return number++;   // Don't do this   }  
  4. }  

可以將 get 訪問器用于返回字段值,或用于計(jì)算字段值并將其返回。例如:

  1. public string Name   
  2.      
  3.    get    {      return name != null ? name : "NA";   }  

在上述代碼段中,如果不對(duì) Name 屬性賦值,它將返回值 NA。示例 1此例說(shuō)明如何訪問基類中被派生類中具有同一名稱的另一個(gè)屬性隱藏的屬性。

  1. // property_hiding.cs  
  2. // Property hidingusing System;  
  3. public class BaseClass   
  4. {    
  5.    private string name;    
  6.    public string Name     
  7.   {       
  8.       get       {         return name;       }    
  9.       set       {         name = value;       }   
  10.   }  
  11. }  
  12. public class DerivedClass : BaseClass   
  13. {     
  14.     private string name;    
  15.     public new string Name   // Notice the use of the new modifier    
  16.    {      
  17.         get       {         return name;       }      
  18.         set       {         name = value;       }    
  19.   }  
  20. }  
  21. public class MainClass   
  22. {  
  23.    public static void Main()    
  24.    {  
  25.      DerivedClass d1 = new DerivedClass();      
  26.      d1.Name = "John"// Derived class property       
  27.      Console.WriteLine("Name in the derived class is: {0}",d1.Name);      
  28.      ((BaseClass)d1).Name = "Mary"// Base class property      
  29.      Console.WriteLine("Name in the base class is: {0}",         ((BaseClass)d1).Name);     
  30.   }  
  31. }  

輸出Name in the derived class is: JohnName in the base class is: Mary以下是上例中顯示的重點(diǎn): 派生類中的屬性 Name 隱藏基類中的屬性 Name。在這種情況下,派生類的該屬性聲明使用 new 修飾符:    public new string Name    {   ...轉(zhuǎn)換 (BaseClass) 用于訪問基類中的隱藏屬性: ((BaseClass)d1).Name = "Mary";

C# get set釋二: 代碼如下:

  1. public class Car  
  2. {  
  3.     private string color;   
  4.     public string Color   
  5.     {    
  6.           get   {return color;    }    
  7.           set    {color=value;    }  
  8.    }  
  9. }  

我的理解是:通過GET和SET對(duì)公有變量Color進(jìn)行讀寫操作,實(shí)際就是間接更改color私有變量的值,那既然如此。為何不設(shè)color為public,讓實(shí)例直接對(duì)color進(jìn)行讀寫操作呢? 如果有一天,老板讓你把這個(gè)類改成當(dāng)汽車的顏色改變時(shí),同時(shí)計(jì)算一下汽車的《價(jià)格》屬性那么如果直接對(duì)Color操作,你不是死定了?  “屬性”是.net的特色之一。

其實(shí)就相當(dāng)于方法,尤其是java中經(jīng)常會(huì)用到get、set方法(.net的有些思想就是java的)。  屬性的真實(shí)作用不只是為了更改某個(gè)成員變量的值比如form的size屬性在set的同時(shí)要重畫form,如果你不想讓用戶對(duì)color修改,就不要提供C# get set方法  是面向?qū)ο缶哂械膕et and get它的用途:  一般是對(duì)類里面的變量進(jìn)行操作. 而不是直接對(duì)類的變量進(jìn)行操作.

有一個(gè)很大的作用就是:  便于維護(hù).因?yàn)?如果一個(gè)類的一個(gè)變量int a ,在其它包或命名空間類中使用了1000次,但是過了許久,你想把a(bǔ)改為b,如果直接對(duì)變量a操作的話,就得需求修改整個(gè)程序的1000處.  如果用屬性了,就不會(huì)了,只需改這個(gè)方法即可public int A{ set {   a = value; } get {   return a; }}放為:public int B{ set {   b = value; } get {   return b; }}除去這個(gè)屬性之外的地方根本不需要改變。

通過上面的講解。有一點(diǎn)點(diǎn)明白了。是不是讓滿足一定條件讓GET和SET來(lái)改變類中的私有變量。而不能讓實(shí)例直接操作。像上面的代碼保證了color屬性的安全性。既然如此可不可以寫成set{color=value*20;  //value是不是相當(dāng)于Color的值} 我當(dāng)初和你有一樣的想法.但是現(xiàn)在改變了。舉個(gè)例子說(shuō)明一下吧.

  1. public class Car  
  2. {   
  3.    public string Color  
  4.  {     
  5.      get   {      
  6.                    ifthis.viewstate["color"]!= null)     
  7.                   {        
  8.                          return this.viewstate["color"];       
  9.                   }      
  10.                         return "":      
  11.             }      
  12.     set    {      this.viewstate["color"];=value;    }   
  13.   }  
  14. }    

在asp.net中通常這么使用.如果用變量的話就不好使用了。而且C# get set中可以寫多個(gè)語(yǔ)句。

【編輯推薦】

  1. 走進(jìn)C#基礎(chǔ)概念之事件
  2. 詳解C#中不同類的類型
  3. 淺談C#中標(biāo)準(zhǔn)Dispose模式的實(shí)現(xiàn)
  4. C#圖片處理的3種高級(jí)實(shí)用方法
  5. C# 4.0新特性:協(xié)變與逆變中的編程思想
責(zé)任編輯:阡陌 來(lái)源: 網(wǎng)易博客
相關(guān)推薦

2009-09-10 16:38:43

C# get set用

2009-08-27 15:22:27

C#中的GET與SET

2009-09-11 09:15:06

C# get方法

2009-09-10 14:52:55

C# get

2024-11-15 00:09:21

2009-09-11 09:15:32

C# get set

2009-09-11 09:10:30

C#編寫游戲

2013-06-05 09:37:09

WindumpWindump網(wǎng)絡(luò)命令

2009-09-10 16:41:13

C# get post

2009-12-14 13:27:06

Ruby區(qū)間

2014-06-19 10:43:37

AndroidScrollerView平滑滾動(dòng)

2009-08-14 17:45:52

C# ArrayLis

2009-08-17 18:34:50

C# ChangeCo

2009-08-07 17:25:37

C# SortedLi

2009-08-25 17:59:49

C#入門

2009-09-02 10:58:02

C#動(dòng)態(tài)數(shù)組

2009-09-11 11:27:38

AttributeUsC# Attribut

2010-08-17 10:39:39

DIVabsoluterelative

2010-01-12 10:29:41

Fedora apt軟

2013-06-05 10:11:20

索引器C#
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)