ThomaLuke Ответов: 1

Как начальное статическое свойство является производным от базового класса.


Как начальное статическое свойство выводится из базового класса, как показано ниже кода.

class A
      {
            protected static string keyName { get; set; }

            static A()
            {
                  Initial();
            }
            public static void Initial()
            {
               
                 string a = keyName;
                
            }
      }

class B:A
      {
         
            static B()
            {
                  keyName = "NewId";
            }

        
      }


Что я уже пробовал:

Я хочу получить значение переменной keyName в начальной функции.

Ralf Meier

Я не уверен, чего вы пытаетесь достичь.
Обычно свойство имеет геттер и сеттер, а также переменную, которая содержит назначенное содержимое.
Я не нахожу ничего подобного в вашем фрагменте кода.
Я предлагаю вам сначала прочитать, Как использовать и кодировать свойства в целом. После этого вы могли бы улучшить свой вопрос ... и, возможно, Вам удастся помочь ...
Но также вы можете описать свою цель и то, как вы хотите ее достичь ...

1 Ответов

Рейтинг:
1

OriginalGriff

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

A a = new A();
Тогда значение keyName свойство никогда не инициализируется (и таким образом null).
Один из способов обойти это - вроде - было бы объявить класс A как abstract, что предотвратило бы создание экземпляров A, но даже тогда конструктор для A будет вызван перед конструктором для B (как и следовало ожидать, A должен быть "полным" до того, как B может использовать его), что все равно будет означать, что keyName не инициализируется ранее Initial призванный.

Вы не можете делать то, что хотите: это просто невозможно, потому что класс A конструктор должен быть завершен перед любым производным классом constructor код может быть выполнен - и это в равной степени относится к экземпляру и статическим конструкторам.

Чего вы пытаетесь достичь, если считаете, что вам это нужно?