C#Visual studio需要引用基类dll

时间:2011-03-18 23:43:52

标签: c# visual-studio inheritance

为什么我会遇到这个问题?

后台: myClass继承自ABC继承的班级BaseClassBaseClass是一个自定义创建的类,位于不同的命名空间中,并包含在不同的DLL程序集中。

问题:VisualStudio希望我添加对BaseClass DLL的引用 - 否则它将无法编译myClass

  • 为什么编译器不使用元数据?
  • 如果我购买了DLL(可能没有源代码)并且供应商使用了数百个类来继承,那么为什么我需要添加(并知道)所有这些引用呢?

由于

4 个答案:

答案 0 :(得分:3)

如果您不提供基类的元数据,它怎么能获得它?它不会从基类复制到派生类并存储在派生类的程序集中。

您的供应商方案不太现实。没有人设计深度为100个类的类层次结构,更不用说将它们中的每一个存储在单独的程序集中。在最坏的情况下,最高可达到六或七。有一个底座组件,有时两个。任何更深层次的人都无法理解它是如何工作的。

答案 1 :(得分:2)

关于您的vendor场景 - 如果该库没有从其他库中暴露任何内容,并且所有这些库仅在内部使用,则不会强制您引用供应商库中的所有库。

但是,如果一个库例如从另一个库(或它的继承者)返回一个类,那么你当然必须引用它们。只是为了获得有关这些暴露类的所有信息。

答案 2 :(得分:2)

如果未引用BaseClass,您的程序将如何知道它及其定义?它应该从哪里获取元数据,如果它没有引用它?

就像在SO上询问一个与Web服务器端相关的问题,但没有告诉任何人你正在使用什么语言/平台 - 没有参考框架。

答案 3 :(得分:1)

让我们回答你的问题......

为了编译MyClass的代码,它需要知道Class做了什么。为了知道Class做了什么,它需要看看BaseClass做了什么 - 它就像一个链。

您需要在项目中包含您正在构建的任何内容。这可以通过实际拥有项目中任何内容的源,或者通过包含对定义行为的项目/二进制文件的引用来完成。

元数据不包含有关类中实际逻辑的任何详细信息。