<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                # C# 屬性 > 原文: [https://zetcode.com/lang/csharp/properties/](https://zetcode.com/lang/csharp/properties/) 在 C# 教程的這一部分中,我們將討論屬性。 屬性是一種特殊的類成員。 我們使用預定義的設置和獲取方法來訪問和修改它們。 屬性讀取和寫入會轉換為獲取和設置方法調用。 與使用自定義方法調用(例如`object.GetName()`)相比,使用字段符號(例如`object.Name`)訪問變量更容易。 但是,就屬性而言,我們仍然具有封裝和信息隱藏的優勢。 換句話說,屬性可以保護數據免受外界干擾,同時可以方便地進行現場訪問。 接口可以具有屬性,但不能具有字段。 屬性可以是讀寫的(它們既有獲取和設置訪問器),也可以是只讀的(它們只有獲取訪問器)或只寫(它們只有設置訪問器)。 `Program.cs` ```cs using System; namespace SimpleProperties { class Person { private string _name; public string Name { get { return _name; } set { _name = value; } } } class Program { static void Main(string[] args) { var p = new Person(); p.Name = "Jane"; Console.WriteLine(p.Name); } } } ``` 我們有一個具有一個屬性的簡單`Person`類。 ```cs public string Name { ... } ``` 我們有一個稱為`Name`的屬性。 它看起來像一個常規方法聲明。 不同之處在于,它具有稱為`get`和`set`的特定訪問器。 ```cs get { return _name; } set { _name = value; } ``` `get`屬性訪問器用于返回屬性值,`set`訪問器用于分配新值。 `value`關鍵字用于定義由設置索引器分配的值。 ```cs var p = new Person(); p.Name = "Jane"; Console.WriteLine(p.Name); ``` 我們創建`Person`類的實例。 我們使用字段符號訪問成員字段。 ```cs $ dotnet run Jane ``` 這是該計劃的結果。 ## C# 只讀屬性 可以創建只讀屬性。 為了創建一個只讀屬性,我們省略了 set 訪問器,在實現中僅提供了 get 訪問器。 `Program.cs` ```cs using System; namespace Readonly { class Person { private string _name = "Jane"; public string Name { get { return _name; } } } class Program { static void Main(string[] args) { var p = new Person(); // p.Name = "Beky"; Console.WriteLine(p.Name); } } } ``` 在前面的示例中,我們演示了只讀屬性的使用。 ```cs private string _name = "Jane"; ``` 我們立即初始化成員,因為以后不可能。 ```cs public string Name { get { return _name; } } ``` 通過僅提供一個 get 訪問器,使該屬性為只讀。 ```cs // p.Name = "Beky"; ``` 現在此行已注釋。 我們無法更改屬性。 如果我們取消注釋該行,則 C# 編譯器將發出以下錯誤:`Program.cs(21,13): error CS0200: Property or indexer 'Person.Name' cannot be assigned to -- it is read only`。 ## C# 自動實現的屬性 C# 具有自動實現或自動屬性。 在軟件項目中,有許多簡單屬性只能設置或獲取一些簡單值。 為了簡化編程并簡化代碼,創建了自動屬性。 注意,我們不能在所有情況下都使用自動屬性。 僅適用于簡單的。 `Program.cs` ```cs using System; namespace Autoimplemented { class Person { public string Name { get; set; } public int Age { get; set; } } class Program { static void Main(string[] args) { var p = new Person(); p.Name = "Jane"; p.Age = 17; Console.WriteLine($"{p.Name} is {p.Age} years old"); } } } ``` 該代碼要短得多。 我們有一個`Person`類,其中有兩個屬性:`Name`和`Age`。 ```cs public string Name { get; set; } public int Age { get; set; } ``` 在這里,我們有兩個自動屬性。 沒有訪問器的實現,也沒有成員字段。 編譯器將為我們完成其余的工作。 ```cs var p = new Person(); p.Name = "Jane"; p.Age = 17; Console.WriteLine($"{p.Name} is {p.Age} years old"); ``` 我們通常照常使用這些屬性。 ```cs $ dotnet run Jane is 17 years old ``` 這是示例的輸出。 ## 表達式主體定義 從 C# 7.0 開始,可以使用表達式主體定義簡化屬性。 表達式主體定義由`=>`符號組成,后跟要分配給該屬性或從該屬性檢索的表達式。 `Program.cs` ```cs using System; namespace ExpBodyDef { class User { string name; string occupation; public User(string name, string occupation) { this.name = name; this.occupation = occupation; } public string Name { get => name; set => name = value; } public string Occupation { get => occupation; set => occupation = value; } } class Program { static void Main(string[] args) { var u = new User("John Doe", "gardener"); Console.WriteLine($"{u.Name} is a {u.Occupation}"); } } } ``` 在示例中,我們使用表達式主體定義來定義`User`類的屬性。 ```cs $ dotnet run John Doe is a gardener ``` 這是輸出。 ## 其他注意事項 我們可以使用`public`,`private`或`protected`等訪問修飾符標記屬性。 屬性也可以是`static`,`abstract`,`virtual`和`sealed`。 它們的用法與常規方法相同。 `Program.cs` ```cs using System; namespace OtherNotes { class Base { protected string _name = "Base class"; public virtual string Name { set { _name = value; } get { return _name; } } } class Derived : Base { protected new string _name = "Derived class"; public override string Name { set { _name = value; } get { return _name; } } } class Program { static void Main(string[] args) { var bs = new Base(); var dr = new Derived(); Console.WriteLine(bs.Name); Console.WriteLine(dr.Name); } } } ``` 在前面的示例中,我們定義了一個虛擬屬性,并在`Derived`類中將其覆蓋。 ```cs public virtual string Name { set { _name = value; } get { return _name; } } ``` 名稱屬性用`virtual`關鍵字標記。 ```cs protected new string _name = "Derived class"; ``` 我們將成員隱藏在`Derived`類中。 為了消除編譯器警告,我們使用`new`關鍵字。 ```cs public override string Name { set { _name = value; } get { return _name; } } ``` 在這里,我們重寫了`Base`類的`Name`屬性。 本章介紹了 C# 屬性。 我們描述了屬性并顯示了如何實現它們。 我們提到了自動屬性和只讀屬性。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看