Лучший отвечающий
Как создать элементарный аналог атрибута Conditional, но более полезного

Вопрос
-
Как сделать с нуля атрибут идентичный (а не жалкое подобие) использованию #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, кроме того я планирую сделать более сложные атрибуты на этой основе. Мне необходимы специфические атрибуты для сетевых взаимодействий и для клиент-серверных приложений, где клиенту запрещено знать что либо о коде сервера.4 мая 2012 г. 5:10
Ответы
-
Здравствуйте.
Исходя из ваших требований - скорей всего ничего кроме препроцессорных директив вам не подходит, все остальное будет включатся в сборку. Поэтому вам нужно либо разделять клиент и сервер на разные классы и использовать атрибуты, не боясь, что кто-то подсмотрит серверные команды. Либо использовать if - endif
Для связи [mail]
- Предложено в качестве ответа YatajgaModerator 5 мая 2012 г. 15:56
- Помечено в качестве ответа Abolmasov Dmitry 25 мая 2012 г. 11:39
5 мая 2012 г. 10:48 -
А еще вариант, сделайте класс для клиента и в него включите все что нужно для его работы. А в серверный проект, добавив ссылку на сборку с первым классом, напишите его потомок, который расширит его функционал до необходимого на сервере.
- Предложено в качестве ответа PashaPashModerator 5 мая 2012 г. 14:48
- Помечено в качестве ответа Abolmasov Dmitry 25 мая 2012 г. 11:39
5 мая 2012 г. 11:05Отвечающий
Все ответы
-
Здравствуйте.
Исходя из ваших требований - скорей всего ничего кроме препроцессорных директив вам не подходит, все остальное будет включатся в сборку. Поэтому вам нужно либо разделять клиент и сервер на разные классы и использовать атрибуты, не боясь, что кто-то подсмотрит серверные команды. Либо использовать if - endif
Для связи [mail]
- Предложено в качестве ответа YatajgaModerator 5 мая 2012 г. 15:56
- Помечено в качестве ответа Abolmasov Dmitry 25 мая 2012 г. 11:39
5 мая 2012 г. 10:48 -
А еще вариант, сделайте класс для клиента и в него включите все что нужно для его работы. А в серверный проект, добавив ссылку на сборку с первым классом, напишите его потомок, который расширит его функционал до необходимого на сервере.
- Предложено в качестве ответа PashaPashModerator 5 мая 2012 г. 14:48
- Помечено в качестве ответа Abolmasov Dmitry 25 мая 2012 г. 11:39
5 мая 2012 г. 11:05Отвечающий