Условный код на основе языка? - PullRequest
3 голосов
/ 13 марта 2012

Я пишу библиотеку для C #. Мне интересно, возможно ли иметь доступ к методам / полям, только если библиотека используется в проекте C #, и если она используется в другом языке .NET, таком как Visual Basic, методы не будут доступны. Причина этого в том, что есть некоторые функции / поля, которые полезны только для небезопасного кода, и было бы немного глупо, если бы они были доступны для Visual Basic, если бы они не служили цели.

Возможно ли иметь в наличии только определенные классы / методы / поля в зависимости от языка, на котором они используются? Если бы не я, я мог бы просто иметь 2 отдельные сборки, доступные для загрузки, то есть одну для C # и одну для VB.Net. Или я мог бы просто включить дополнительные методы независимо (но я хотел бы предотвратить путаницу с теми, кто не знаком с указателями и небезопасным кодом, просто чтобы пользователи не возились с небезопасными методами и случайно не делали глупостей, но я полагаю, это действительно не имеет значения!).

Спасибо!

Ответы [ 2 ]

2 голосов
/ 13 марта 2012

Можно ли иметь в наличии только определенные классы / методы / поля в зависимости от языка, на котором они используются?

номер

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

Используйте абстракцию. Создайте сборку с интерфейсами / базовыми классами и предоставьте некоторым потребителям эту сборку вместе с другой с безопасными реализациями и другими потребителями базовую сборку вместе с другой, предоставляющей расширенные функциональные возможности.

В качестве альтернативы, вы можете использовать одну сборку с внутренними методами и использовать атрибут InternalsVisibleToAttribute, если вы знаете, какие «расширенные» сборки будут его использовать.

0 голосов
/ 13 марта 2012

Насколько я знаю, нет никакого способа определить язык сборки, вызывающей один из вас, поскольку к тому времени, когда это происходит, все все равно говорят по-IL (или, скорее, скомпилированные инструкции, но неважно).

Я думаю, что лучшим вариантом в этом случае будет компилировать две разные версии сборки на основе условий и предоставлять их своим пользователям в зависимости от того, какой язык они используют.Или вы можете просто включить весь код и сказать своим пользователям VB, чтобы они не обращались к некоторым функциям.

Я должен признать, что я не уверен, что вы могли бы делать здесь, что могло бы подвергать небезопасному чему-либозвонящим;некоторые IntPtr или что-то?

...