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

C# 方法全景:宣告、參數傳遞、多載、運算子多載與靜態/非靜態差異

     編輯:關於C#

方法在 C# 物件模型中的定位

C# 是純物件導向語言:所有程式碼必須封裝在類別/結構體內,不存在全域函式、全域變數。方法是類別的函式成員,負責執行計算、動作或副作用。

方法宣告完整語法

[attributes] [method-modifiers] 回傳型別 方法名稱 (參數列表) {
    // 方法本體
}

方法修飾詞對照表

修飾詞說明互斥組
new遮蔽基類別同名方法—
public/protected/internal/private存取層級單一
static屬於類別,無 this—
virtual允許衍生類別 overrideA
override覆寫基類別 virtual/abstract 方法A
abstract無本體,強制衍生類別實作A
sealed禁止進一步 override需配合 override
extern外部實作 (如 P/Invoke)—
async非同步方法 (C# 5+)—
unsafe允許指標操作—

互斥組 A:static/virtual/override/abstract 四者任兩兩互斥。

四種參數傳遞模式

模式關鍵字特性適用場景
值參數(無)複製值,原變數不受影響預設,小型值型別、不可變參考型別
參考參數ref傳遞記憶體位址,可修改原變數需修改呼叫端變數、大型結構體避免複製
輸出參數out不需初始化,方法必須指派值多傳回值、TryParse 模式
參數陣列params可變數量引數,內部為陣列參數個數不固定、便利呼叫

方法多載

  • 同名方法,參數型別/數量/順序不同 (回傳型別不參與多載區分)。
  • 編譯器依呼叫端實際引數型別解析最佳匹配。
  • 避免模糊多載:void M(int x) vs void M(long x) 呼叫 M(5) 會選 int 版本。

運算子多載

  • 靜態方法,命名為 operator + 等符號。
  • 一元運算子:operator ++(T x);二元運算子:operator +(T left, T right)。
  • 可多載:+ - ! ~ ++ -- true false * / % & | ^ << >> == != < > <= >=。
  • 不可多載:= && || ?: new typeof sizeof is as。
  • 成對多載:==/!=、</>、<=/>=、true/false 必須成對實作。

靜態 vs 非靜態方法存取規則


class Demo {
    static int _staticData;
    int _instanceData;

    static void StaticMethod() {
        _staticData = 1;      // OK
        // _instanceData = 1; // CS0120: 需物件參考
    }

    void InstanceMethod() {
        _staticData = 1;      // OK
        _instanceData = 1;    // OK
        StaticMethod();       // OK
    }
}

靜態方法可透過傳遞實例參考來存取非靜態成員 (如 static void Print(Window w) => Console.WriteLine(w.Title);)。

現代 C# 方法進階特性

  • 運算式主體:public int Add(int a, int b) => a + b;
  • 區域函式 (C# 7):方法內嵌方法,可捕捉外層變數。
  • 預設參數值:void M(int x = 10)。
  • 命名引數:M(y: 5, x: 3)。
  • ref 回傳/區域變數 (C# 7):ref int Find(int[] arr, int val)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved