面向对象编程中与静态关键字有关的问题

本文关键字:问题 关键字 静态 面向对象编程 | 更新日期: 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;
    }
}

根据经验:非静态成员不能从静态成员访问

如何将继承的类的变量访问到静态函数中?

  1. 在静态方法中创建一个实例。

  2. 使用对象直接访问属性或调用实例方法。

  3. 在方法中使用非静态属性。

但是,您应该更改的签名

protected static t_rolepermissions GetPermissions()

protected t_rolepermissions GetPermissions()

我想到了另一点,尽管有点晚了,但同时标记staticprotected成员是没有意义的。static不会被继承,所以将其标记为protected是没有意义的。