С# - Получение ссылок на ссылки

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


person Community    schedule 10.12.2008    source источник


Ответы (6)


Это зависит от того, что вы подразумеваете под внутренней ссылкой.

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

Однако, если тип A предоставляет некоторые общедоступные свойства, методы, возвращающие типы, или принимающие параметры типов, или, возможно, тип A является потомком типа, расположенного в какой-либо другой сборке, то вам также потребуется ссылка на эту другую сборку.

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

Однако, если компилятор жалуется, то это главное.

person Lasse V. Karlsen    schedule 10.12.2008
comment
Если библиотека раскрывает типы своих собственных сторонних ссылок, то в целом она потерпела огромный провал. Инкапсулированные люди!! - person ljs; 11.12.2008

Вам нужно только сослаться на DLL. Вы ссылаетесь только на то, что используете в сборке; сборки являются полностью самоописываемыми отдельными единицами и, следовательно, не требуют ссылки на ссылки, на которые ссылается сборка (я иронизирую, неоднократно используя здесь слово «ссылка» :-) .

Представьте, что вам пришлось это сделать — BCL ссылается на множество разных вещей, не говоря уже о сторонних компонентах, представьте, сколько усилий вам придется приложить, чтобы просто получить правильные ссылки!

person ljs    schedule 10.12.2008

Если вы ссылаетесь на какие-либо типы (даже если это только их члены или типизированные экземпляры), которые предоставляет ссылочная сборка, вы также должны включить ссылку на эту сборку.

person Mark Cidade    schedule 10.12.2008

Возьмите свое собственное перечисление в ctor и переведите его в стороннее перечисление. Я считаю, что это избавит вашего вызывающего абонента от необходимости ссылаться на стороннюю сборку (хотя, конечно, она все равно должна быть доступна во время выполнения, чтобы ваш код работал).

person Mark Brackett    schedule 10.12.2008

Я думаю, что lassevk кратко объяснил это, но просто хотел добавить, что, хотя вам не нужно ссылаться на эти дополнительные сборки, используемые DLL (опять же при условии, что они используются только внутри и не выставляются), вы < em>do по-прежнему необходимо сделать их доступными для вашего приложения. То есть они должны быть доступны для поиска — либо вместе с приложением, либо в GAC, иначе DLL, которая их использует, не сможет их найти.

person devios1    schedule 10.12.2008

Я не уверен, что вы пытаетесь сделать, но вам не нужно ссылаться на какую-либо сборку, если вы этого не хотите. Вы можете использовать отражение. Обычно это считается взломом и не рекомендуется, но иногда необходимо. Вот вам статья, объясняющая, как это сделать.

person Enes    schedule 10.12.2008