2012-01-18 33 views
0

我有以下類:的對象有關Static關鍵字發行面向對象編程

public abstract class TMSPageBaseClass : System.Web.UI.Page 
{ 
    protected DevExpress.Xpo.Session XpoSession; 
} 

public class CommonUtility : TMSPageBaseClass 
{ 
    protected static t_rolepermissions GetPermissions() 
    { 
     //here I want to access the variable XpoSession defined in abstract class, I tried 
     this.XpoSession //it throws an error saying: Keyword this is not valid in a static Property, 
     } 
} 

那麼,如何可以訪問繼承類變量爲靜態函數嗎?

+1

爲什麼GetPermissions()必須是靜態的? – jolySoft 2012-01-18 11:07:14

+1

請使用不正確的語言來做** not **標籤。這不是C或C++。 – Oded 2012-01-18 11:07:24

+2

是的,您無法從靜態方法訪問實例成員。爲什麼你首先要使用靜態方法? – Groo 2012-01-18 11:07:39

回答

1

靜態屬性或方法無法引用當前實例(this),因爲它們沒有在實例級別上定義,而是在類級別上定義。

他們應該只引用靜態成員或獲取傳入的對象,他們可以引用(而不是這個)。

0

使該方法非靜態或傳入CommonUtility作爲參數。靜態方法不能訪問實例變量,因爲靜態方法沒有要引用的實例。

0

作爲一個經驗法則:非靜態成員不能從靜態成員訪問。

我該如何訪問繼承的classe的變量爲靜態函數?

  1. 創建靜態方法中的一個實例。

  2. 直接使用對象訪問屬性或調用實例方法。

  3. 方法內使用非靜態屬性。

但是你應該從簽名

protected static t_rolepermissions GetPermissions() 

protected t_rolepermissions GetPermissions() 

還有一點來考慮改變,晚了一點,雖然,它沒有任何意義既標誌着一個成員staticprotected。靜態不會被繼承,因此標記它保護是沒有意義的。

0

我不認爲你可以這樣做。如果你想在靜態方法中訪問你的變量,那麼該變量也必須是靜態的。

否則,您也可以將您的對象的一個​​實例傳遞給您的靜態方法。例如:

public class CommonUtility : TMSPageBaseClass 
{ 
    protected static t_rolepermissions GetPermissions(TMSPageBaseClass context) 
    { 
     context.XpoSession; 
    } 
}