我有两个程序集:A和B。 A已经设置了InternalsVisibleTo,可以让B访问它的内部成员。 我想以一种保持内部性的方式从A中进行调用,以获取只能由B中定义的类型知道的信息。我可以通过在A中定义一个内部接口,并在B中显式实现来实现这一点。
当有人引用程序集B并从ClassB派生时,问题就出现了——他们会得到错误提示:“类型‘AssemblyA.IHasData’在未被引用的程序集中定义”,尽管这个类型对他们来说应该是不可见的。如果我查看公共类型定义,我会看到我所期望的——ClassB没有实现任何接口。 为什么会出现这个错误?所有的实现都在程序集B中。我可以在ClassB内部使用IHasData,而不需要引用程序集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。请帮我理解发生了什么?
ClassB
的实例转换为IHasData
。然后ClassB
可以在内部继续被使用,好像它是一个IHasData
。 - Mark Rushakoff