c# – 具有内部基础的接口继承

前端之家收集整理的这篇文章主要介绍了c# – 具有内部基础的接口继承前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想知道是否有办法完成以下任务:

在我的项目中,我定义了一个界面,让我们说IFruit.此接口具有公共方法GetName().我还声明了一个实现IFruit的接口IApple,并公开了一些其他方法,如GetAppleType()或其他东西.有更多的水果,如IBanana,ICherry,等等.

现在在外面,我只希望能够使用实际的水果实现而不是IFruit本身.但我不能将IFruit接口声明为私有或内部接口,因为继承的接口会说“无法实现,因为基类不易访问”.

我知道这可以用抽象实现,但在这种情况下这不是一个选项:我真的需要使用接口.有这样的选择吗?

更新
我想我的例子需要澄清:)我使用MEF来加载接口实现.加载的集合基于IApple,IBanana,ICherry等.但IFruit本身是无用的,我不能仅使用基于该接口的类.所以我一直在寻找一种方法来阻止其他开发人员单独实施IFruit,认为他们的类将被加载(它不会被加载).所以基本上,它归结为:

internal interface IFruit
{
  public string GetName();
}

public interface IApple : IFruit { public decimal GetDiameter(); }

public interface IBanana : IFruit { public decimal GetLenght(); }

但由于不太容易访问的基本接口,这将无法编译.

解决方法

你真的不可能做你正在尝试的事情,但你可以使用带有[Obsolete]属性的IFruit界面让人们离开,并提供说明原因的消息.

在您的IBanana,IApple,…界面上,禁用显示的过时警告.

[Obsolete]
public interface IFruit {
    ...
}

#pragma warning disable 612
public interface IBanana : IFruit {
    ...
}
#pragma warning restore 612

猜你在找的C#相关文章