c# – 接口,抽象还是虚拟方法?

我有一堆系统,我们称之为A,B,C,D,E,F,G,H,I,J.

他们都有类似的方法和属性.有些包含完全相同的方法和属性,有些可能略有不同,有些可能会有很大差异.现在,我为每个系统都有很多重复的代码.例如,我有一个名为GetPropertyInformation()的方法,它是为每个系统定义的.我试图找出哪种方法是减少重复代码的最佳方法,或者下面的方法之一不是要走的路:

接口

public Interface ISystem
{
    public void GetPropertyInformation();
    //Other methods to implement
}

public class A : ISystem
{
    public void GetPropertyInformation()
    {
       //Code here
    }
}

抽象

public abstract class System
{
    public virtual void GetPropertyInformation()
    {
        //Standard Code here
    }
}

public class B : System
{
   public override void GetPropertyInformation()
   {
      //B specific code here
    }
}

超级基类中的虚方法

public class System
{
   public virtual void GetPropertyInformation()
    {
     //System Code
    }
}

public class C : System
{
  public override void GetPropertyInformation()
  {
      //C Code
  }
}

一个问题,虽然它可能是愚蠢的,但我们假设我采用抽象方法并且我想要覆盖GetPropertyInformation,但是我需要传递一个额外的参数,这是可能的还是我必须在抽象中创建另一个方法类?例如,GetPropertyInformation(x)

最佳答案
你的抽象和“超级基础”方法并没有太大的不同.您应始终将基类抽象化,并且您可以提供默认实现(虚拟方法)或不提供(抽象方法).决定因素是你是否想要拥有基类的实例,我想不是.

所以它在基类和接口之间.如果A,B C类之间存在强耦合,那么您可以使用基类,也可以使用常见的实现.

如果A,B,C类自然不属于单个“族”,则使用接口.

而系统并不是一个好名字.

并且在覆盖时无法更改参数列表.也许默认参数可以帮助,否则你只需要2次重载GetPropertyInformation().

转载注明原文:c# – 接口,抽象还是虚拟方法? - 代码日志