2013-10-04 2 views
0

Можно ли использовать директивы компилятора #if для пропуска свойств в классе?Условная компиляция для свойств класса на основе проекта-потребителя

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

Я попытался добавить условный символ компиляции в проектах, например. MYSYMBOL

, а затем делать это в моем классе:

#if MYSYMBOL 

public string MySpecialProperty { get; set; } 

#endif 

Она компилирует, но ни один проект может увидеть MySpecialProperty, тогда, очевидно, я бы надеялся на проект с MYSYMBOL определенной, чтобы иметь возможность получить доступ к этому свойству. ..

+0

Почему вы не наследуете этот класс во втором проекте, чтобы добавить два новых свойства? Ваш базовый проект не может использовать эти два свойства очень эффективно, если они являются условными. Необходимость сделать их условными выглядит как дизайн-запах. –

+0

@AdamHouldsworth спасибо за ваше предложение, но мне просто интересно узнать, возможно ли то, что я спросил :-) – Rob

ответ

0

MYSYMBOL должен быть определен в проекте компиляции, чтобы сделать видимым свойство. Таким образом, если у вас есть общий проект библиотеки, вы можете определить его там или нет. Таким образом, скомпилированная библиотека всегда будет содержать свойство или нет, независимо от того, какой проект потребления вы используете в библиотеке.

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

Смежные вопросы