面向对象编程中与静态关键字有关的问题
本文关键字:问题 关键字 静态 面向对象编程 | 更新日期: 2023-09-27 18:20:33
我有以下类:
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,
}
}
那么,如何将继承的类变量访问到静态函数中呢?
静态属性或方法不能引用当前实例(this),因为它们不是在实例级别定义的,而是在类级别定义的。
它们应该只引用静态成员,或者传入一个可以引用的对象(而不是这样)。
使方法非静态或将CommonUtility
作为参数传递。静态方法无法访问实例变量,因为静态方法没有可引用的实例。
我认为你做不到。如果要在静态方法中访问变量,则该变量也必须是静态的。
否则,您还可以将对象的实例传递给静态方法。类似于:
public class CommonUtility : TMSPageBaseClass
{
protected static t_rolepermissions GetPermissions(TMSPageBaseClass context)
{
context.XpoSession;
}
}
根据经验:非静态成员不能从静态成员访问
如何将继承的类的变量访问到静态函数中?
-
在静态方法中创建一个实例。
-
使用对象直接访问属性或调用实例方法。
-
在方法中使用非静态属性。
但是,您应该更改的签名
protected static t_rolepermissions GetPermissions()
至
protected t_rolepermissions GetPermissions()
我想到了另一点,尽管有点晚了,但同时标记static
和protected
成员是没有意义的。static不会被继承,所以将其标记为protected是没有意义的。