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

使用C#接口,同时最大化代码重用

发布时间:2020-12-16 00:04:28 所属栏目:百科 来源:网络整理
导读:所以说我有一个C#类, class Foo : Bar,IBar,IBar2{} …其中Bar是一个类,IWhatever和IFine是接口.我打算在多个类中使用类似的IWhatever和IFine实现 – 我可以看到封装这些代码并在所有类中重用它的唯一理智方法是创建一个类,无论继承自IW和I的继承自IFine和使
所以说我有一个C#类,

class Foo : Bar,IBar,IBar2
{

}

…其中Bar是一个类,IWhatever和IFine是接口.我打算在多个类中使用类似的IWhatever和IFine实现 – 我可以看到封装这些代码并在所有类中重用它的唯一理智方法是创建一个类,无论继承自IW和I的继承自IFine和使它们成为实现这些接口的类的成员,然后在从接口实现的成员中调用它们的成员,如下所示:

class Foo : Bar,IWhatever,IFine
{
   IWhatever mWhatever;
   IFine mFine;
   Foo()
   {
      mWhatever = new Whatever();
      mFine = new Fine();
   }
   // from IWhatever
   void Kick()
   {
      mWhatever.Kick();
   }
   // from IFine
   void Punch()
   {
      mFine.Punch();
   }
}

我做得对吗?有没有更好的办法?

解决方法

当您尝试通过继承在多个类中实现相同的多个实现时,这就是设计气味. C#缺乏多重(类)继承实际上是一种资产,而不是这方面的责任,因为它强制执行单一责任原则.

可以这样想:C#中可用的两种类型的抽象有两种互补形式来表示现实生活中的实体.

>抽象类:“是一个”
>界面:“做某事”或“有这样的品质/行为”

这意味着接口应该几乎总是“空洞的”,因为我们假设即使不同的类可能实现相同的接口,很可能每个接口都会采用不同的方式.

请谨慎使用继承.记住GOF的圣人智慧:

Favor object composition over inheritance.

所以回到你试图解决的问题,这样做可能会更好:

public class Foo : Bar
{
   public IWhatever Whatever
   {
      get;
      private set;
   }

   public IFine Fine
   {
      get;
      private set;
   }

   public Foo(IWhatever whatever,IFine fine)
   {
      Whatever = whatever;
      Fine = fine;
   }
}

现在使用IOC容器注入这些接口的具体实现.这是我的谦虚建议.

(编辑:李大同)

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

    推荐文章
      热点阅读