Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
0 / 0 / 0
Регистрация: 02.02.2018
Сообщений: 4
1

Инициализация статических полей

10.03.2019, 18:09. Просмотров 926. Ответов 3

Ковыряю legacy код, возможно нубский вопрос
Есть глобальный класс со статическими полями и статическим конструктором, начало такое:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
public sealed class Global
{
       public static int arg1;
       public static Application App; //Application - это интерфейс от COM объекта
       .......// тут куча полей
 
static Global() //статический конструктор
        {
            ........//куча инициализированных переменных
        ........
        }
// методы...
 }
Далее есть класс Server в котором наследуется интерфейс ApplicationServer. И есть метод Start, куда передается объект SiteObject:
C#
1
2
3
4
5
6
7
8
9
public class Server : ApplicationServer
    {
public void Start(ApplicationSite SiteObject, bool begin)
    {
      Global.App = SiteObject.Application; // <- здесь возникает NullReferenceException
         ............................
    }
    .......//далее методы
}
Компилируется это нормально, однако в рантайме получаю NullReferenceException на строке Global.App = SiteObject.Application, я так понимаю статическое поле Global.App инициализируется в null и присвоить ссылку на объект нельзя. Ссылок на поле Global.App в программе очень много. Пока хочу заставить это работать в таком виде, потом может перепишу. Как правильно инициализировать это поле?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.03.2019, 18:09
Ответы с готовыми решениями:

Наследование статических полей
Вопрос такой: может ли производный класс наследовать поля родительского класса с модификатором...

В чем отличие динамических полей от статических?
Объясните пжслт на примере

Замена статических полей на обычные переменные
Всем доброго времени суток.Сегодня обнаружил что в моем коде программы уже насчитывается 37...

Инициализация полей структур
Насколько знаю, у экземпляров классов поля всегда инициализируются значениями по умолчанию перед...

3
Эксперт .NETАвтор FAQ
9644 / 4757 / 1710
Регистрация: 11.01.2015
Сообщений: 5,933
Записей в блоге: 34
10.03.2019, 18:38 2
Цитата Сообщение от illegally_happy Посмотреть сообщение
получаю NullReferenceException на строке Global.App = SiteObject.Application, я так понимаю статическое поле Global.App инициализируется в null и присвоить ссылку на объект нельзя
null у вас скорее всего в объекте SiteObject.
А Global.App тут не при чем.
0
0 / 0 / 0
Регистрация: 02.02.2018
Сообщений: 4
10.03.2019, 21:44  [ТС] 3
Нет, я всегда могу выкинуть глобальный класс добавить переменную и написать так:
C#
1
2
3
4
5
6
7
8
9
10
11
public class Server : ApplicationServer
    {
private App Application;
 
public void Start(ApplicationSite SiteObject, bool begin)
    {
      App = SiteObject.Application; // <- а здесь нет никаких NullReferenceException
         ............................
    }
    .......//далее методы
}
И далее ссылаться на переменную App - и всё хорошо будет работать
####

Проблема в том чтобы перекинуть SiteObject.Application в глобальный класс т.к. на статическое поле Global.App очень много ссылок из других мест программы. Видимо здесь нечто похожее на паттерн Singleton. Но есть какая-то фигня с инициализацией поля Global.App, конкретно- "NullReferenceException:Инициализатор типа "Programm1.Global" выдал исключение"
(Programm1 - это namespace)
0
Эксперт .NETАвтор FAQ
9644 / 4757 / 1710
Регистрация: 11.01.2015
Сообщений: 5,933
Записей в блоге: 34
10.03.2019, 21:49 4
Цитата Сообщение от illegally_happy Посмотреть сообщение
"NullReferenceException:Инициализатор типа "Programm1.Global" выдал исключение"
А, ну так у вас проблема в статическом конструкторе класса Global.
При первом обращении к классу Global - вызывается его статический конструктор, а там возникает исключение (NullReferenceException). А само поле App - опять же не при чем.

Поставьте точку останова в конструкторе Global и выясните что там за проблема.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.03.2019, 21:49

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Не происходит инициализация полей
есть класс public class DinnerParty { private const int costOfFoodPerPerson = 30; ...

Инициализация полей структуры
Всем, привет. Такой вопрос, при написании вот такого кода в c# struct a { } int main() { ...

Инициализация полей классов
Сколько раз здесь будет инициализирован x? class InitialierTestClass { public...

Обращение и инициализация полей класса
привет! помогите пожалуйста разобраться, как это работает. нужно понять что просходит под...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.