国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

首頁 類庫下載 C#類庫 C# 屬性訪問器

C# 屬性訪問器

Oct 13, 2016 pm 04:31 PM

屬性的訪問器包含與獲取或設(shè)置屬性有關(guān)的可執(zhí)行語句。訪問器聲明可以包含 get 訪問器或 set 訪問器,或者兩者均包含。聲明采用下列形式之一:

get {}
set {}

get 訪問器:
get 訪問器體與方法體相似。它必須返回屬性類型的值。執(zhí)行 get 訪問器相當(dāng)于讀取字段的值。

以下是返回私有字段 name 的值的 get 訪問器:

private string name;  // the name field
 
public string Name  // the Name 
 
property
{    
   get
   {       
       return name;
   }
}

當(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 語句中終止,并且控制不能超出訪問器體。



set 訪問器:
set 訪問器與返回 void 的方法類似。它使用稱為 value 的隱式參數(shù),此參數(shù)的類型是屬性的類型。

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

public string Name
{  
   get
   {  
        return name;
   }  
     
   set
   {
       name = value;
   }
}

當(dāng)對屬性賦值時(shí),該操作將調(diào)用 set 訪問器。

例如:

e1.Name = "Joe"; // The set accessor is invoked here

在 set 訪問器中對局部變量聲明使用隱式參數(shù)名 (value) 是錯(cuò)誤的。


備注:

屬性按如下方式,根據(jù)所使用的訪問器進(jìn)行分類:
只帶有 get 訪問器的屬性稱為只讀屬性。無法對只讀屬性賦值。
只帶有 set 訪問器的屬性稱為只寫屬性。只寫屬性除作為賦值的目標(biāo)外,無法對其進(jìn)行引用。
同時(shí)帶有 get 和 set 訪問器的屬性為讀寫屬性。
在屬性聲明中,get 和 set 訪問器都必須在屬性體的內(nèi)部聲明。
使用 get 訪問器更改對象的狀態(tài)是一種錯(cuò)誤的編程樣式。


我們通過下面的例子來認(rèn)識(shí)什么是訪問器:

 using System; 
 namespace AccessorEG
 {     
     public class Student
     {         
         // 私有字段 private field
         private int _age; 
          
         // 公開的屬性 public property
         public int Age
         {             
            get { return _age; }             
            set { _age = value; }
         }
     } 
      
     class Program
     {         
         static void Main(string[] args)
         {
             Student stu = new Student();
             stu.Age = 10;                           // 使用了修改
             Console.WriteLine(stu.Age.ToString()); //使用了讀取 輸出 10                  
             Console.ReadKey();                    
         }
     }
 }

 很好理解,訪問器就是指對象類型成員對外界的接口,就是使對象類型成員與外界進(jìn)行信息交互的橋梁,有了訪問器,外界就能對對象成員進(jìn)行讀、寫的對應(yīng)操作。

  那么,什么成員能夠擁有訪問器呢?非只讀的字段和事件是可以聲明訪問器的。當(dāng)然,只讀域也能提供被外界獲取的接口,即get,但是只能在聲明或構(gòu)造函數(shù)中初始化,而且它并不支持提供set方法。

 using System; 
 namespace AccessorEG
 {     
     public class Student
     {         
         // 私有字段 private field
         private readonly int _age = 10; 
          
         // 公開的屬性 public property
         public int Age
         {   
               get { return _age; }
         }
     } 
      
     class Program
     {        
         static void Main(string[] args)
         {
             Student stu = new Student();
             Console.WriteLine(stu.Age.ToString());  // 使用了讀取   輸出 10                
             Console.ReadKey();                              
         }
     }
 }

  上述代碼中只讀域的值在聲明時(shí)就已經(jīng)賦了,而它對應(yīng)公開屬性的訪問器中也不能提供set方法,不然會(huì)無法通過編譯,但是它可以被外界取得。

  關(guān)于字段的訪問器我們還要說一些,常見的有以下寫法:

using System; 
 namespace AccessorEG
 {     
     public class Student
     {         
         #region 全訪問權(quán)限         // 私有字段
         private int _age;        // 與_age對應(yīng)的公開屬性,包含了set和get方法
          
         public int Age
         {             
             get { return _age; }             
             set { _age = value; }
         } 
         // 如果您安裝了.NET3.0,那么您可以使用自動(dòng)屬性,屆時(shí),上面的代碼即可以下面的代替
      // 在VS.NET下輸入 prop 連擊兩下Tab鍵,編譯器會(huì)自動(dòng)幫您生成自動(dòng)屬性
      // public int Age { get; set; }
         #endregion // 全訪問權(quán)限
  
         #region 只讀屬性         
         private string _name; 
          
         public string Name
         {             
            get { return _name; }
         } 
         // 等同于
      // public string Name { private set; get; }
         #endregion
  
         #region 只寫屬性         
         private bool _sex; 
          
         public bool Sex
         {          
             set { _sex = value; }
         }         
         // 等同于
      // public bool Sex { set; private get; }
         #endregion
  
     } 
      
     class Program
     {         
         static void Main(string[] args)
         {
             Student stu = new Student();
             stu.Age = 18;             
             // stu.Name = "Johness"; 異常,編譯錯(cuò)誤,因?yàn)樵搶傩灾蛔x
         // Console.WriteLine(stu.Sex.ToString()); 異常,編譯錯(cuò)誤,因?yàn)樵搶傩灾粚?
             Console.WriteLine(stu.Age.ToString());  // 使用了讀取                    Console.ReadKey();             // 輸出 18         
         }
     }
 }

  以上示例中的只讀、只寫僅對外界有效,如果您顯示得制定了該訪問器的所有者,即類的私有字段。那么在類的內(nèi)部,您仍可以方便的使用您定義的私有字段進(jìn)行讀寫操作,因此,我建議朋友們定義字段及其訪問器使用.NET2.0的語法而不用3.0的新語法(自動(dòng)屬性)。當(dāng)然,利用訪問器也能更好地對數(shù)據(jù)有效性進(jìn)行驗(yàn)證:

using System; 
 namespace AccessorEG
 {     
     public class Student
     {         
         // 私有字段
         private int _age;  // 與_age對應(yīng)的公開屬性,包含了set和get方法
          
         public int Age
         {             
             get { return _age; } // 利用訪問器對輸入的年齡進(jìn)行驗(yàn)證
         // 如果輸入值小于0或者大于100
         // 可以賦為默認(rèn)值18或者不進(jìn)行操作
             set 
             {                 
                   if (value >= 0 && value <= 100)
                    _age = value;   // 如果數(shù)據(jù)無效不進(jìn)行操作可以注釋以下內(nèi)容
                   else
                    _age = 18;
             }
         }
  
     } 
      
     class Program
     {         
         static void Main(string[] args)
         {
             Student stu = new Student();
             stu.Age = -2;   // 賦無效值                     
             Console.WriteLine(stu.Age.ToString()); 
             Console.ReadKey();    // 輸出 18         
         }
     }
 }


本站聲明
本文內(nèi)容由網(wǎng)友自發(fā)貢獻(xiàn),版權(quán)歸原作者所有,本站不承擔(dān)相應(yīng)法律責(zé)任。如您發(fā)現(xiàn)有涉嫌抄襲侵權(quán)的內(nèi)容,請聯(lián)系admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣服圖片

Undresser.AI Undress

Undresser.AI Undress

人工智能驅(qū)動(dòng)的應(yīng)用程序,用于創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用于從照片中去除衣服的在線人工智能工具。

Clothoff.io

Clothoff.io

AI脫衣機(jī)

Video Face Swap

Video Face Swap

使用我們完全免費(fèi)的人工智能換臉工具輕松在任何視頻中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的代碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

功能強(qiáng)大的PHP集成開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級代碼編輯軟件(SublimeText3)