我想知道是否有一种方法可以实现以下内容:
在我的项目中,我定义了一个接口,假设叫做IFruit。这个接口有一个公共方法GetName()。我还声明了一个接口IApple,它实现了IFruit并暴露了一些其他方法,比如GetAppleType()或其他什么方法。还有更多的水果,比如IBanana、ICherry等。
现在,在外部,我只想使用实际的水果实现,而不是IFruit本身。但我不能将IFruit接口声明为私有或内部,因为继承的接口会说“无法实现,因为基类不可访问”。
我知道这可以通过抽象实现来实现,但在这种情况下不是选项:我真的需要使用接口。有这样的选项吗?
更新 我想我的例子需要一些澄清 :) 我使用MEF加载接口实现。加载的集合基于IApple、IBanana、ICherry等。但IFruit本身是无用的,我不能使用仅基于该接口的类。所以我正在寻找一种方法防止其他开发人员仅实现IFruit,认为他们的类将被加载(实际上不会)。所以基本上,它归结为:
在我的项目中,我定义了一个接口,假设叫做IFruit。这个接口有一个公共方法GetName()。我还声明了一个接口IApple,它实现了IFruit并暴露了一些其他方法,比如GetAppleType()或其他什么方法。还有更多的水果,比如IBanana、ICherry等。
现在,在外部,我只想使用实际的水果实现,而不是IFruit本身。但我不能将IFruit接口声明为私有或内部,因为继承的接口会说“无法实现,因为基类不可访问”。
我知道这可以通过抽象实现来实现,但在这种情况下不是选项:我真的需要使用接口。有这样的选项吗?
更新 我想我的例子需要一些澄清 :) 我使用MEF加载接口实现。加载的集合基于IApple、IBanana、ICherry等。但IFruit本身是无用的,我不能使用仅基于该接口的类。所以我正在寻找一种方法防止其他开发人员仅实现IFruit,认为他们的类将被加载(实际上不会)。所以基本上,它归结为:
internal interface IFruit
{
public string GetName();
}
公共接口IApple : IFruit { public decimal GetDiameter(); }
公共接口IBanana : IFruit { public decimal GetLenght(); }
但由于基础接口不可访问,这段代码无法编译。
GetName();
并为每个水果都有一个单独的包装器...但这将是从外部 API 视角下唯一干净的方式...)。 - AnorZaken