Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 接口就像一个;过滤器类型;?_C#_Interface - Fatal编程技术网

C# 接口就像一个;过滤器类型;?

C# 接口就像一个;过滤器类型;?,c#,interface,C#,Interface,也许这是一个愚蠢的问题,但我想知道创建一个空接口作为“过滤器”类型是否是一个好的实践 例如:仅对实现所需/特定接口的对象执行某些操作?接口用于强制执行某些操作,例如每辆车都有轮胎、仪表板、喇叭功能。 所以这个CarObject类将被所有Car类继承,而CarObject类中函数的实现将被强制在继承它们的类中执行。因此,是的,它可以用作过滤器并根据需要添加功能。FXCop建议,有比使用过滤器更好的方法 有关更多详细信息,请参见这些答案 您的想法是正确的,这就是接口的用途,但您提到: 采取行动

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


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

接口用于强制执行某些操作,例如每辆车都有轮胎、仪表板、喇叭功能。
所以这个CarObject类将被所有Car类继承,而CarObject类中函数的实现将被强制在继承它们的类中执行。因此,是的,它可以用作过滤器并根据需要添加功能。

FXCop建议,有比使用过滤器更好的方法

有关更多详细信息,请参见这些答案


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

      采取行动

      这表明您想要执行某种方法,这甚至更好。在这种情况下,我建议这样的接口:

      public interface IMyInterface
      {
        void MyAction();
      }
      
      然后,您可以对实现该接口的任何对象调用
      MyAction

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


      .

      认为“某些动作”仍然需要反射和类型转换。因此,这似乎不是完成任何事情的理想方式。在界面中定义“操作”,它就不是空的!对实现接口的任何对象调用该操作。只有一种情况下该操作有效。当将接口/空抽象类绑定到
      ContentControl
      的属性并在运行时交换实现时,我想最好定义“执行一些操作”。有些操作需要访问方法的某些属性,因此,在这种情况下,使用空接口不是一个好的做法。我想到的一个有效的花瓶是,如果您想将不同的泛型类放入同一个集合中,如
      列表集合
      ,并用例如
      类CarService:BaseService,MyInterface
      类HouseService:BaseService,MyInterface
      类StuffService:BaseService,MyInterface