2012-03-12 3 views
3

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

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

Спасибо!

+0

Небезопасный код не соответствует требованиям CLS, что означает, что вы не сможете позвонить в него из VB.Net. Я понятия не имею о F #. Таким образом, вы будете предупреждать, что управляемые люди из C++ не смогут использовать ваши указатели. Это кажется немного лишним. Каковы ваши цели? – IanNorton

+0

Интерфейсы. Интерфейсы. Интерфейсы. ;-) –

ответ

2

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

No.

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

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

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

+0

Я не вижу, как небезопасный контекст имеет какое-либо отношение к использованию сборки с другого языка .NET. Просто из любопытства, я что-то упускаю (очень возможно ...)? –

+0

Невозможно сделать то, что было задано. Я предложил альтернативу - предоставить разные сборки (один с уменьшенным API) для разных клиентов, в зависимости от того, сколько доверенных клиентов, а не на каком языке .NET они используют. –

+1

О нет, я это понимаю.Я спрашиваю, что о небезопасном контексте сделает сборку непригодной для использования на других языках .NET (как думает OP)? –

0

Насколько я знаю, нет способа определить язык сборки, вызывающий вас в одну из ваших, так как к тому времени, когда все происходит, все говорят ИЛ в любом случае (или, скорее, скомпилированные инструкции, но что угодно).

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

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

+0

IntPtr - хорошая идея. – Alex

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