gpt4 book ai didi

c# - C#中的继承和引用包含基类的dll

转载 作者:行者123 更新时间:2023-11-30 14:00:14 27 4
gpt4 key购买 nike

我有一个场景,编译器提示我缺少所需的引用。

我有 3 个程序集:

  • A.DLL

    • 公共(public)类BaseClass
  • B.DLL(引用 A.DLL)

    • 公共(public)类 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 没有。

最佳答案

This completely breaks the encapsulation, and i am not sure why this is needed (since B.DLL references A.DLL).

我不明白它是如何“完全破坏封装”的。

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

即使你不喜欢它,它就是这样。如果您不希望在编译时需要 A.dll,您可以使用组合而不是继承 - 但在执行时您仍然需要 A.dll -无论如何时间。

关于c# - C#中的继承和引用包含基类的dll,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11608008/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com