2013-11-02 1 views
-1

Хорошо, у меня есть решение, над которым я работаю, в нем есть 4 разных проекта. Один из моих проектов (консольное приложение) пытается сделать ссылку на некоторые из классов, определенных в другом проекте (библиотеке); единственная проблема заключается в том, что они называются Внутренние в библиотеке.Недоступно из-за уровня защиты - между 2 различными сборками в C#

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

+1

Зачем вам это делать? Либо измените классификатор на общедоступность, либо примите, что внутренние элементы не видны снаружи. Или используйте отражение. –

+0

Возможный дубликат [C# Инициализация внутреннего класса с помощью частного конструктора] (http://stackoverflow.com/questions/2023193/c-sharp-instantiating-internal-class-with-private-constructor) –

+1

Вы можете использовать это, чтобы сделать внутренние классы, доступные в дружественной сборке http://msdn.microsoft.com/en-us/library/system.runtime.compilerservices.internalsvisibletoattribute.aspx – Dan

ответ

0

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

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

1

Вам обычно не следует обращаться к чему-то internal. Это побеждает цель объявить это так в первую очередь. Если, однако, вы должны ...

Если вы можете изменить сборку с internal вещами, либо:

  1. Сделать классы public или
  2. Используйте InternalsVisibleToAttribute подвергать его просто сборки, которые вы хотите.

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