Доступ к статическим членам статических членов

Рассмотрим следующие классы

class A
{
public static int i;
}

class B
{
public static A a{get;}=new A();  // without new A(), B.A will be null
}

сейчас,

Ba дает новый экземпляр A, и поскольку переменная "i" класса A является статической, я не могу получить доступ к "i" через Ba, т.е. Bai - ошибка времени компиляции.

Я понимаю, что если я делаю, как показано ниже,

class B
{
  static class A
  {
    static int i;
   }
}

тогда я мог бы сделать BAi

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

Также обратите внимание на то, что класс "A" сделан статическим, а класс "B" -

class B
{
public static A a{get;}
}

выдает ошибку времени компиляции, что "статический тип не может быть использован в качестве возвращаемого типа".

3 ответа

Решение

Поскольку i является статическим членом A вы можете получить к нему доступ напрямую, как

class B
{
  public static A a {get;} = new A();  
  public int ii{get;} = A.i; 
}  

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

int value = A.i;

Если вам нужно, вы также можете добавить статический класс:

public static class A
{
public static int i;
}

и вы можете использовать в любом месте вашего кода, как:

int value = A.i;

как я могу получить доступ к статическим членам статического члена класса?

Если что-то является членом класса - статическое или не статическое - это означает, что это либо значение, либо ссылка на экземпляр чего-либо. Следовательно, если вы знаете, что у вас есть экземпляр класса, но этот класс сам имеет статические члены, просто статически обращайтесь к ним:

class MyClass
{
    public static string Value { get; }
}

string x = MyClass.Value;
Другие вопросы по тегам