【发布时间】:2010-05-28 02:50:13
【问题描述】:
我有两个程序集:A 和 B。A 为 B 设置了 InternalsVisibleTo。我想从 A 调用以获取只能由 B 中定义的类型知道的信息,以保持内部信息。我可以使用在 A 中定义并在 B 中显式实现的内部接口来做到这一点。
程序集 A
internal interface IHasData
{
Data GetData();
}
class ClassA
{
DoSomething(IHasData);
}
大会B
public abstract class ClassB : IHasData
{
Data IHasData.GetData() { /** do something internal **/ }
}
当有人引用程序集 B 并从 ClassB 派生时,麻烦就来了 - 他们得到错误:“类型 'AssemblyA.IHasData' 是在未引用的程序集中定义的”,即使该类型对他们来说应该是不可见的。如果我查看公共类型定义,我会看到我所期望的 - 没有实现接口的 ClassB。
为什么会出现此错误?所有的实现都在程序集 B 中。我可以在 ClassB 内部使用 IHasData,这不需要引用程序集 A。有人可以帮我了解发生了什么吗?
【问题讨论】: