我有一个场景,编译器抱怨我错过了所需的参考.
我有3个组件:
A.DLL
B.DLL(参考文献A.DLL)
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没有.
这完全破坏了封装,我不确定为什么需要这样做(因为B.DLL引用了A.DLL).
我不明白它是如何"彻底打破封装"的.
为了执行成员解析,编译器需要知道其中包含的内容BaseClass.因此,要编译C.dll,您需要引用A.dll和B.dll.当某人正在编写访问实例的代码时DerivedClass,他们需要知道BaseClass支持的内容,因为它可能是DerivedClass自身覆盖的超集.
即使你不喜欢它,这就是它的方式.如果你不想在需要A.DLL 编译 -时间,你可以使用组成,而不是继承-但你仍然需要A.DLL在执行 -时间反正.