C#中的继承和引用包含基类的DLL

lys*_*cid 3 .net c# reference

我有一个场景,编译器抱怨我错过了所需的参考.

我有3个组件:

  • A.DLL

    • 公共类BaseClass
  • B.DLL(参考文献A.DLL)

    • 公共类DerivedClass:BaseClass
  • C.DLL

    var derived = new DerivedClass();

在C.DLL中,我只引用B.DLL(我只需要访问DerivedClass).

编译器给出了一个错误,说我还需要引用A.DLL

这完全破坏了封装,我不确定为什么需要这样做(因为B.DLL引用了A.DLL).

编辑:关于"打破封装"的错误选择.我的意图是这导致了对这个项目(C.DLL)的额外编译时约束,因为我只是从B.DLL实例化类型,而不是从A.DLL实例化.

我希望删除这个编译时要求,主要是因为B和C坐在同一个解决方案中,但A没有.

Jon*_*eet 7

这完全破坏了封装,我不确定为什么需要这样做(因为B.DLL引用了A.DLL).

我不明白它是如何"彻底打破封装"的.

为了执行成员解析,编译器需要知道其中包含的内容BaseClass.因此,要编译C.dll,您需要引用A.dll和B.dll.当某人正在编写访问实例的代码时DerivedClass,他们需要知道BaseClass支持的内容,因为它可能是DerivedClass自身覆盖的超集.

即使你不喜欢它,这就是它的方式.如果你不想在需要A.DLL 编译 -时间,你可以使用组成,而不是继承-但你仍然需要A.DLL在执行 -时间反正.