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

C# 類別成員完整分類:宣告與繼承成員、函式/資料成員、存取/this/靜態/常數詳解

     編輯:關於C#

成員來源雙軌制

來源說明
宣告成員類別本身定義的成員
繼承成員從基類別繼承而來 (非 private)

成員類型完整分類

大類成員類型關鍵字/語法說明
資料成員常數const編譯期常值,隱含 static
欄位field變數儲存,支援 static/readonly
事件event發布/訂閱通知
函式成員方法method執行計算/動作
屬性property封裝 get/set 邏輯
索引子this[]陣列式存取介面
運算子operator多載符號運算
建構子ctor實例初始化
解構子~Class()非受控資源最終化
解構函式DeconstructC# 7.0+ 元組解構支援

存取修飾詞五層級

修飾詞可存取範圍適用對象
public任何地方所有成員
protected類別內部 + 衍生類別所有成員
internal同一組件內部所有成員
protected internal同一組件 或 衍生類別 (跨組件)所有成員
private僅類別內部所有成員 (預設)
private protected同一組件內的衍生類別C# 7.2+,所有成員

this 關鍵字四大使用場景

場景this 型別說明
類別建構子值型別 (參考)指向正在建構的實例
類別方法/屬性/索引子值型別 (參考)指向呼叫該成員的實例
結構體建構子變數型別 (by-ref)指向正在建構的結構體變數
結構體方法變數型別 (by-ref)指向呼叫該方法的結構體變數
  • this 為唯讀,不可指派 (this = ... 錯誤)、不可 ++/--。
  • 可作為回傳值:return this; (流暢介面模式)。
  • C++ 程式員注意:無 this->、::,統一用 . 存取成員。

靜態 vs 非靜態成員核心差異


class Demo {
    int _instanceField = 1;
    static int _staticField = 2;

    void InstanceMethod() {
        _instanceField = 10; // OK
        _staticField = 20;   // OK
    }

    static void StaticMethod() {
        _staticField = 20;   // OK
        // _instanceField = 10; // CS0120: 需要物件參考
    }
}
  • 靜態成員屬於類別,單一儲存位置,所有實例共享。
  • 非靜態成員屬於實例,每個實例獨立副本。
  • 實例成員可透過 this 隱含存取;靜態成員不可用 this。

成員常數:const 欄位規範


class MathConstants {
    public const double PI = 3.141592653589793;
    public const double E = 2.718281828459045;
    // 可合併宣告
    public const int MaxRetries = 3, DefaultTimeout = 5000;
}
  • 修飾詞:new, public, protected, internal, private (無 static,隱含 static)。
  • 型別限制:內建值型別 + string + null 參考。
  • 必須在宣告時初始化,值為編譯期常數運算式。
  • 跨組件使用時:值內嵌至呼叫端 IL,修改值需重新編譯消費者。

成員存取實戰範例:Vehicle/Train/Car


class Vehicle {
    public int Wheels;
    protected float Weight;
    void InternalMethod() {
        Wheels = 4;   // OK: 存取自身 public
        Weight = 10;  // OK: 存取自身 protected
    }
}

class Train {
    public int Carriages;
    private int Passengers;
    private float Weight; // 隱藏 Vehicle.Weight (無關)
    void Test(Vehicle v) {
        v.Wheels = 4;     // OK: public
        // v.Weight = 6;   // CS0122: protected 外部不可存取
        Weight = 6;       // OK: 自身 private
    }
}

class Car : Vehicle {
    void Test(Vehicle v) {
        v.Wheels = 4;     // OK: public
        v.Weight = 6;     // OK: protected 衍生類別可存取基類別 protected
    }
}
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved