加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 07:41:32 所属栏目:百科 来源:网络整理
导读:我想知道是否有办法完成以下任务: 在我的项目中,我定义了一个界面,让我们说IFruit.此接口具有公共方法GetName().我还声明了一个实现IFruit的接口IApple,并公开了一些其他方法,如GetAppleType()或其他东西.有更多的水果,如IBanana,ICherry,等等. 现在在外面,
我想知道是否有办法完成以下任务:

在我的项目中,我定义了一个界面,让我们说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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读