【问题标题】:Interface just as a "filter type"? [closed]接口只是作为“过滤器类型”吗? [关闭]
【发布时间】:2019-09-05 13:29:17
【问题描述】:

也许这是一个愚蠢的问题,但我想知道创建一个空接口作为“过滤器”类型是否是一种好习惯?

例如:仅对实现所需/特定接口的对象执行某些操作?

【问题讨论】:

  • 那个“一些动作”仍然需要反射和类型转换。所以这似乎不是完成任何事情的理想方式。
  • 在界面中定义“action”不为空!对实现接口的任何对象调用操作。
  • 只有一种情况是有效的。这是将接口/空抽象类绑定到ContentControl 的属性并在运行时交换实现
  • 我想定义“做一些动作”会很好。有些操作需要访问方法的某些属性,因此在这种情况下,使用空接口不是一个好习惯。
  • 我想到的一个有效花瓶是,如果您想将不同的泛型类放入同一个集合中,例如 List<iMyInterface> collection 并用例如 class CarService : BaseService<Car>, MyInterfaceclass HouseService : BaseService<House>, MyInterfaceclass StuffService : BaseService<SomeotherStuff>, MyInterface 填充它.

标签: c# interface


【解决方案1】:

有比使用Marker Interface 更好的方法,FXCop 推荐Avoid empty interfaces

有关详细信息,请参阅这些答案;

【讨论】:

    【解决方案2】:

    您的想法是正确的,这就是接口的用途,但是您提到了:

    做一些动作

    这表明你想执行一些方法,那就更好了。在那种情况下,我会建议这样的界面:

    public interface IMyInterface
    {
      void MyAction();
    }
    

    然后你可以在任何实现接口的对象上调用MyAction

    显然,void 这里可以更改为您想要返回的任何类型,并且您可以使用任何符合您要求的参数 :)

    More on interfaces.

    【讨论】:

      【解决方案3】:

      接口用于强制某些东西,就像每辆汽车都有轮胎、仪表板、喇叭功能一样。 所以这个 CarObject 类将被所有 Car 类继承,并且 CarObject 类中的函数的实现将被强制在继承它们的类中进行。所以是的,它可以用作过滤器并根据需要添加功能。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-22
        • 1970-01-01
        • 1970-01-01
        • 2012-12-02
        • 1970-01-01
        • 2014-09-18
        相关资源
        最近更新 更多