none
Как создать элементарный аналог атрибута Conditional, но более полезного RRS feed

  • Вопрос

  • Как сделать с нуля атрибут идентичный (а не жалкое подобие) использованию #if/#endif:

    class Class

    {

    #if SERVER

    int X;

    #endif

        int Y;

    #if SERVER

        void ServerFunction(){}

    #endif

        void ClientFunction(){}

    }

    class Class

    {

        [ServerOnly]

        int X;

        int Y;

        [ServerOnly]

        void ServerFunction(){}

        void ClientFunction(){}

    }

    В результирующей сборке не должно быть ни единого следа [ServerOnly] переменных и функций (даже в Рефлекторе):

    class Class

    {

        int Y;

        void ClientFunction(){}

    }

    И мне необходимо получать сообщения об ошибках на этапе начала компиляции, о том, что таких функций и переменных не существует, в точности как при использовании #if/#endif.

    Для чего это ?: для более читаемого кода чем с применением #if/#endif, кроме того я планирую сделать более сложные атрибуты на этой основе. Мне необходимы специфические атрибуты для сетевых взаимодействий и для клиент-серверных приложений, где клиенту запрещено знать что либо о коде сервера.

Ответы

  • Здравствуйте.

    Исходя из ваших требований - скорей всего ничего кроме препроцессорных директив вам не подходит, все остальное будет включатся в сборку. Поэтому вам нужно либо разделять клиент и сервер на разные классы и использовать атрибуты, не боясь, что кто-то подсмотрит серверные команды. Либо использовать if - endif


    Для связи [mail]

    • Предложено в качестве ответа YatajgaEditor 5 мая 2012 г. 15:56
    • Помечено в качестве ответа Abolmasov Dmitry 25 мая 2012 г. 11:39
  • А еще вариант, сделайте класс для клиента и в него включите все что нужно для его работы. А в серверный проект, добавив ссылку на сборку с первым классом, напишите его потомок, который расширит его функционал до необходимого на сервере.
    • Предложено в качестве ответа PashaPashModerator 5 мая 2012 г. 14:48
    • Помечено в качестве ответа Abolmasov Dmitry 25 мая 2012 г. 11:39
    Отвечающий

Все ответы

  • Здравствуйте.

    Исходя из ваших требований - скорей всего ничего кроме препроцессорных директив вам не подходит, все остальное будет включатся в сборку. Поэтому вам нужно либо разделять клиент и сервер на разные классы и использовать атрибуты, не боясь, что кто-то подсмотрит серверные команды. Либо использовать if - endif


    Для связи [mail]

    • Предложено в качестве ответа YatajgaEditor 5 мая 2012 г. 15:56
    • Помечено в качестве ответа Abolmasov Dmitry 25 мая 2012 г. 11:39
  • А еще вариант, сделайте класс для клиента и в него включите все что нужно для его работы. А в серверный проект, добавив ссылку на сборку с первым классом, напишите его потомок, который расширит его функционал до необходимого на сервере.
    • Предложено в качестве ответа PashaPashModerator 5 мая 2012 г. 14:48
    • Помечено в качестве ответа Abolmasov Dmitry 25 мая 2012 г. 11:39
    Отвечающий