一千萬個為什麽

搜索

靜態屬性引用非靜態方法

靜態屬性如何引用非靜態方法?

例:

public static int UserID
{
  get
  {
     return GetUserID();
  }
}

private int GetUserID()
{
  return 1;
}

當我嘗試編譯它時,我得到錯誤:“非靜態字段,方法或屬性需要對象引用”GetUserID()“

最佳答案

這不起作用。

定義靜態屬性(或靜態方法)時,您定義的屬性適用於類類型,而不是類的實例。

另一方面,實例屬性和方法適用於特定的,構造的類實例。要使用它們,您需要引用該特定實例。 (反過來說,沒問題。)

舉個例子,想想Fruit和一個“Apple”類。假設蘋果類具有一個實例屬性,這個屬性是Apple此時的成熟程度。

你不會像蘋果那樣描述它有多成熟,而是描述一個特定的“蘋果”(實例)。另一方面,您可以擁有一個蘋果實例,並詢問它是否包含種子(可能在Apple類本身上定義(靜態))。

轉載註明原文: 靜態屬性引用非靜態方法