程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C#銳利體驗(七)(3)

C#銳利體驗(七)(3)

編輯:關於C語言

當然屬性遠遠不止僅僅限於域的接口操作,屬性的本質還是方法,我們可以根據程序邏輯在屬性的提取或賦值時進行某些檢查,警告等額外操作,看下面的例子:

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等修飾符對屬性與方法同樣的行為,但由於屬性在本質上被實現為兩個方法,它的某些行為需要我們注意。看下面的例子:

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 { 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中的虛屬性。

靜態屬性和靜態方法一樣只能存取類的靜態域變量。我們也可以像做外部方法那樣,聲明外部屬性

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved