Мне нужно проходить по древовидной иерархии родственных объектов и для каждого из объектов выполнять набор действий.
Каждое действие требует определенных данных об объекте — я, после перехода на объект в дереве, создаю набор параметров (данных об этом конкретном объекте) и отдаю этот набор в модуль, выполняющий сами эти действия (что-то вроде паттерна "стратегия" ). Внутри модуля каждая стратегия сама вытягивает из набора параметров те, которые ей нужны. Все вроде работает. Я не отдаю объект целиком, вместе с его данными, потому что не хочу связывать интерфейсы объектов и стратегий.
Но мне не нравится моя архитектура программы. Вначале я использовал
Dictionary<string, object> parameters
потом я подумал, что нехорошо для сотен и тысяч объектов создавать сотни и тысячи словарей. Все равно программа — однопоточная и вполне подойдет для хранения параметров один, статический объект... А потом подумал — еще лучше использовать структуру — меньше засорение памяти, быстрее работа.
Сделал структуру. Все ее поля (и свойства) — статические. Но само объявление структуры — без слова static (компилятор не разрешает).
Хотелось бы услышать мнения о следующем:
— допустимо ли использование структуры описанным мной образом? Если да, то будет ли эффект от ее применения?
— если моя структура фактически статическая (проверял значения ее полей всему по стеку — сохраняются при выходе из методов), то почему компилятор против слова static в объявлении структуры?
Здравствуйте, tol05, Вы писали:
T>Сделал структуру. Все ее поля (и свойства) — статические. Но само объявление структуры — без слова static (компилятор не разрешает).
T>Хотелось бы услышать мнения о следующем: T>- допустимо ли использование структуры описанным мной образом?
Допустимо T>- Если да, то будет ли эффект от ее применения?
Нет, никакого отличия от использования статического класса не будет.
Здравствуйте, tol05, Вы писали:
T>- допустимо ли использование структуры описанным мной образом?
О допустимости с формальной точки зрения скажет компилятор :о)) С точки же зрения здравого смысла — нет, ибо специально для подобных случаев были добавлены в язык статические классы.
T>Если да, то будет ли эффект от ее применения?
А какой эффект ты ожидаешь?
T>- если моя структура фактически статическая (проверял значения ее полей всему по стеку — сохраняются при выходе из методов), то почему компилятор против слова static в объявлении структуры?
Потому что статическая структура — это бесмысленно, так как одна из особенностей статических классов — то, что экземпляр такого класса создать нельзя и, =>, делать структуру, которую так же было бы нельзя создать, не нужно, так как она ни чем не отличалась бы от статического класса.
Основное (и единственное) назначение структур в том, что память под них выделяется на стеке. Всё. Добавление чего-либо ещё нарушает Single responsibility principle, что затрудняет использование и понимание структур. Во всех остальных "общих" случаях (например, создание типа только со статическими членами) необходимо полдьзоваться классами.
... << RSDN@Home 1.2.0 alpha rev. 717>>
Help will always be given at Hogwarts to those who ask for it.
Здравствуйте, _FRED_, Вы писали:
_FR>А какой эффект ты ожидаешь?
_FR>Основное (и единственное) назначение структур в том, что память под них выделяется на стеке. Всё.
Вот этого эффекта и ожидал. Быстродействия, поскольку очень большое количество обращений производится. И значения полей меняются постоянно, да и полей — не одно...
по остальным тезисам — согласен. Мне и самому не нравится мой вариант. Нравился бы, не просил бы совета.
Здравствуйте, tol05, Вы писали:
_FR>>А какой эффект ты ожидаешь? _FR>>Основное (и единственное) назначение структур в том, что память под них выделяется на стеке. Всё. T>Вот этого эффекта и ожидал. Быстродействия, поскольку очень большое количество обращений производится. И значения полей меняются постоянно, да и полей — не одно...
Если ты обращаешься только к _статическим_ данным — никакого эффекта от быстродействия из-за размещения _экземпляров_ структуры на стеке быть не может.
... << RSDN@Home 1.2.0 alpha rev. 717>>
Help will always be given at Hogwarts to those who ask for it.