Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > С#

С# Средство разработки на платформе .Net

Ответ
 
Опции темы
Старый 20.09.2013, 13:56   #1
Reizel
Задрот
 
Аватар для Reizel
 
Регистрация: 24.07.2009
Адрес: Ивановская область, г. Кинешма
Сообщений: 1,574
Написано 407 полезных сообщений
(для 863 пользователей)
Static constructor execution

У меня есть класс PrototypeCollector, синглтон. он нужен для коллекционирования классов, которые хотят пассивно создавать свои экземпляры извне. Сейчас поясню, для чего это нужно


class PrototypeCollector
    {
        //INTERFACE
        List<dynamic> prototypes = new List<dynamic>();
        int commonPercentage = 0;
        public void AddPrototype(Type t,int p)
        {
            prototypes.Add(new
            {
                type = t,
                percentage = p
            });
            commonPercentage = 0;
            prototypes.ForEach((pr) => commonPercentage += pr.percentage);
            Console.WriteLine("Common percentage: {0}", commonPercentage);
        }
        public void PrintDiagram()
        {
            Console.WriteLine("Report about added classes:");
            prototypes.ForEach((dynamic p) =>
            {
                Console.WriteLine("Class: {0} | Percentage: {1}",p.type.ToString(),p.percentage.ToString());
            });
            Console.WriteLine("==--==");
        }
        //==================================
        public static PrototypeCollector Instance
        {
            get;
            private set;
        }
        private PrototypeCollector()
        {
            Instance = this;
        }
        static PrototypeCollector()
        {
            new PrototypeCollector();
        }
    }


И есть класс Circle, который хочет без всякого лишнего кода "добавиться" в коллекцию прототипов синглтона:


class Circle
    {
        static Circle()
        {
            PrototypeCollector.Instance.AddPrototype(typeof(Circle), 20);
        }
    }


Нужно, чтоб этот статический конструктор вызывался в любом случае, так как явного вызова конструкторов класса Circle не будет (они будут создаваться PrototypeCollector'ом рефлексивно), соответственно, компилятор не видит явной нужды в классе Circle. Такое чувство, что он "забивает" на него. Считает лишним (ну раз его никто извне не использует и не вызывает)

Вопрос: как мне объяснить компилятору, что класс Circle нужен, и необходимо запустить его статический конструктор в любом случае, в независимости от внешнего использования?
(Offline)
 
Ответить с цитированием
Старый 20.09.2013, 18:42   #2
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Ответ: Static constructor execution

Разве что попробовать рефлексией пройти по всем сборкам в домене приложения и получить данные о типах... и то я не знаю, сработает ли конструктор или нет.

Для таких вещей мы делали атрибуты для классов и потом искали классы с нужными атрибутами по всем загруженным сборкам.
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Reizel (23.09.2013)
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 18:03.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com