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

Rumah 類庫下載 C#類庫 C# 屬性訪問器

C# 屬性訪問器

Oct 13, 2016 pm 04:31 PM

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

get {}
set {}

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

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

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

當引用屬性時,除非該屬性為賦值目標,否則將調用 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;
   }
}

當對屬性賦值時,該操作將調用 set 訪問器。

例如:

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

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


備注:

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


我們通過下面的例子來認識什么是訪問器:

 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();                    
         }
     }
 }

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

  那么,什么成員能夠擁有訪問器呢?非只讀的字段和事件是可以聲明訪問器的。當然,只讀域也能提供被外界獲取的接口,即get,但是只能在聲明或構造函數(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();                              
         }
     }
 }

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

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

using System; 
 namespace AccessorEG
 {     
     public class Student
     {         
         #region 全訪問權限         // 私有字段
         private int _age;        // 與_age對應的公開屬性,包含了set和get方法
          
         public int Age
         {             
             get { return _age; }             
             set { _age = value; }
         } 
         // 如果您安裝了.NET3.0,那么您可以使用自動屬性,屆時,上面的代碼即可以下面的代替
      // 在VS.NET下輸入 prop 連擊兩下Tab鍵,編譯器會自動幫您生成自動屬性
      // public int Age { get; set; }
         #endregion // 全訪問權限
  
         #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"; 異常,編譯錯誤,因為該屬性只讀
         // Console.WriteLine(stu.Sex.ToString()); 異常,編譯錯誤,因為該屬性只寫
             Console.WriteLine(stu.Age.ToString());  // 使用了讀取                    Console.ReadKey();             // 輸出 18         
         }
     }
 }

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

using System; 
 namespace AccessorEG
 {     
     public class Student
     {         
         // 私有字段
         private int _age;  // 與_age對應的公開屬性,包含了set和get方法
          
         public int Age
         {             
             get { return _age; } // 利用訪問器對輸入的年齡進行驗證
         // 如果輸入值小于0或者大于100
         // 可以賦為默認值18或者不進行操作
             set 
             {                 
                   if (value >= 0 && value <= 100)
                    _age = value;   // 如果數(shù)據(jù)無效不進行操作可以注釋以下內容
                   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         
         }
     }
 }


Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Tutorial PHP
1488
72