原因是因为接口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