Проблема, связанная с ключевым словом Static в объектно-ориентированном программировании - PullRequest
0 голосов
/ 18 января 2012

У меня есть следующий класс:

 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,
      }
 } 

Так как я могу получить доступ к этой наследуемой переменной класса в статическую функцию?

Ответы [ 4 ]

1 голос
/ 18 января 2012

Статические свойства или методы не могут ссылаться на текущий экземпляр (this), поскольку они определены не на уровне экземпляра, а на уровне класса.

Они должны либо ссылаться только на статические члены, либо передавать объект, на который они могут ссылаться (вместо этого).

0 голосов
/ 18 января 2012

Я не думаю, что вы можете сделать это.Если вы хотите получить доступ к вашей переменной в статическом методе, эта переменная также должна быть статической.

В противном случае вы также можете передать экземпляр вашего объекта в статический метод.Что-то вроде:

public class CommonUtility : TMSPageBaseClass
{
    protected static t_rolepermissions GetPermissions(TMSPageBaseClass context)
    {
       context.XpoSession;
    }
}
0 голосов
/ 18 января 2012

Практическое правило. Нестатические элементы не доступны из статических элементов.

как я могу получить доступ к этой унаследованной переменной classe в статическую функцию?

  1. Создать экземпляр в статическом методе.

  2. Доступ к свойству напрямую с использованием объекта ИЛИ вызов метода экземпляра.

  3. В методе используется нестатическое свойство.

Однако вы должны изменить подпись с

protected static t_rolepermissions GetPermissions()

до

protected t_rolepermissions GetPermissions()

Еще одна мысль пришла в голову, хотя и с небольшим опозданием, не имеет смысла отмечать участника как static и protected. static не будет наследоваться, поэтому помечать его как защищенное не имеет смысла.

0 голосов
/ 18 января 2012

Сделать метод нестатичным или передать в качестве параметра CommonUtility. Статические методы не могут получить доступ к переменным экземпляра, потому что у статических методов нет экземпляра для ссылки.

...