原因是因爲接口I
是公共簽名C
的一部分,因此當您使用C
時,它也必須知道接口定義。因此它需要組件被引用。
爲了說明:
// Assembly 2
public class C : I
{
...
}
// Assembly 3 - needs definition of `I` from assembly 1 because part of `C`
// public definition.
public static C getC (int id)
{
...
}
由於I
是作爲C
的一部分公開可見(例如,可以分配一個C
到I
類型等的參考),即希望用C組件3需要C
(組件2)和I
兩者的定義(組件1)
但是,如果C
使用I
內部(不包括其他組件可見),你就不需要refe rence I
的程序集使用C
。例如:
// Assembly 2
public class C
{
private I _someInternalUseOfI = ...;
...
}
// Assembly 3 - Since in this case, `I` is only used privately in assembly 2,
// only assembly 2 needs the reference to `I` in assembly 1.
public static C getC (int id)
{
...
}
這有道理嗎?因爲類的基類和接口是其定義的一部分,所以它們需要被任何引用程序集知道。但是如果它們在內部使用但在外部不可見,那麼它們不一定需要被任何引用程序集知道。
P3中的'A'應該是'C'嗎? –
這不是特定於接口,它只是如何.net工作 –
@詹姆斯:是的,更正。 – Johnny5