日期:2014-05-20  浏览次数:20747 次

程序集的依赖关系
有 程序集 A B C

情况一:

  在程序集A 中,编写 类base

  在程序集B 中,编写 类Sub:base

  在C中, 编写 类Application, 其中 实例化Sub

此时, ABC的引用关系为, B引用A, C引用A与B

情况二:

  在程序集A 中,编写 类base

  在程序集B 中,编写 类Sub, 其中 实例化 base

  在C中, 编写 类Application, 其中 实例化Sub

此时, ABC的引用关系为, B引用A, C此时仅需引用B(而无需引用A)

这是,什么原理?

 


------解决方案--------------------
我觉得应该是,因为在第一种情况下,Sub是Base的子类,那么Sub中就会有可能override(当Base中的方法为virtual时),或者implement(当Base中的方法为abstract时) Base中的方法,而这个方法的定义是在Base中的。然而,Application要用Sub,就必须要知道这些方法/属性等的定义,因此Application也要引用A。

第二种情况,由于Base是Sub的一个component,即使Sub中公布了Base对象的某些方法或者属性,那它也只不过是一个wrapper,即仅仅是将调用转发给自己肚子里的Base,这样一来,Application根本不需要知道Base的细节,因为它被Sub封装了。

------解决方案--------------------
探讨
感谢 acqy 与 vrhero的回复

我仍有一点不明

在情况1中,类Base中,并没有 virtual 或 abstract 的方法

我又做了一个实验, 在Sub中我不覆盖任何父类的方法或属性

这时,编译器仍提示我需要应用A

这是什么原理呢?

谢谢