2012-01-18 66 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; 
    } 
}