首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# 銳利體驗 (七) (3):屬性進階應用與繼承行為

     編輯:關於C語言

屬性不只是欄位存取介面

屬性本質上是方法,我們可以在屬性的取值(get)或指派(set)邏輯中,根據程式需求執行檢查、警告等額外操作。請看下例:

class MyClass
{
    private string name;
    public string Name
    {
        get { return name; }
        set
        {
            if (value == null)
                name = "Microsoft";
            else
                name = value;
        }
    }
}

屬性的修飾詞與繼承行為

屬性具備方法的各種修飾特性。屬性同樣有 5 種存取修飾詞,但通常為 public,否則失去作為類別公開介面的意義。除了方法因多參數具備多載特性外,virtual、sealed、override、abstract 等修飾詞對屬性與方法行為相同。但因屬性本質實現為兩個方法(get/set),某些行為需特別注意:

abstract class A
{
    int y;
    public virtual int X
    {
        get { return 0; }
    }
    public virtual int Y
    {
        get { return y; }
        set { y = value; }
    }
    public abstract int Z { get; set; }
}

class B : A
{
    int z;
    public override int X
    {
        get { return base.X + 1; }
    }
    public override int Y
    {
        // 僅覆寫 set 存取子
        set { base.Y = value < 0 ? 0 : value; }
    }
    public override int Z
    {
        get { return z; }
        set { z = value; }
    }
}

此例集中展示屬性在繼承脈絡中的典型行為:

  • 類別 A 因抽象屬性 Z 存在而必須宣告為 abstract。
  • 子類別 B 透過 base 關鍵字存取父類別 A 的屬性。
  • 類別 B 僅透過 Y 的 set 存取子即覆寫了類別 A 中的虛擬屬性。

靜態屬性與外部屬性

靜態屬性與靜態方法相同,只能存取類別的靜態欄位變數。我們也可以像宣告外部方法那樣,宣告外部屬性(extern)。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved