gpt4 book ai didi

c# - 接口(interface)隔离原则用法

转载 作者:行者123 更新时间:2023-11-30 19:16:29 26 4
gpt4 key购买 nike

这种情况在我身上发生过很多次,我不知道如何解决。

Interface segregation principle是为了防止某些情况,当某些接口(interface)实现不使用它的功能时——这是显而易见的。通常情况下,我有一个接口(interface)列表,我想用它们做一些事情。让我们看一下没有 ISP 的例子:

  public interface IPerson
{
void Run();
void Eat();
}

public class AbcPerson : IPerson
{
void Run(){};
void Eat(){};
}

public class XyzPerson : IPerson
{
void Run(){};
void Eat(){};
}

List<IPerson> People {get;set;}

我想和每个人一起运行。

      foreach(var person in People)
{
person.Run();
}

现在我想和他们一起吃饭。

          foreach(var person in People)
{
person.Eat();
}

现在如果我想使用 ISP,我应该将代码更改为:

        public interface IRunnable
{
void Run();
}
public interface IEatable
{
void Eat();
}

public class AbcPerson : IRunnable,IEatable
{
void Run(){};
void Eat(){};
}

public class XyzPerson : IRunnable,IEatable
{
void Run(){};
void Eat(){};
}

我应该如何制作人员名单?我应该制作两个 Runable 和 Eatable 列表并添加对象(丑陋)还是第二种方法 - 创建一个列表并在可能的情况下转换它们(丑陋)?我不知道这样做的最佳约定是什么。

这个例子可能不是我能想象到的最好的例子,但我希望你明白我的意思。

已编辑:我更改了接口(interface)和类以及原理名称。

最佳答案

如果你的系统中有一个东西在运行和吃,那么将它定义为一个接口(interface):

public interface IHungryRunner : IRunnable, IEatable
{ }

假设 IRunnable 和 IEatable 将永远单独使用,否则就将它们放在一起。

您还可以维护单独的 IRunnable 和 IEatable 列表,而不是试图将它们混为一谈。

关于c# - 接口(interface)隔离原则用法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24142103/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com