Xai*_*oft 8 c# oop abstract-class virtual-functions interface
我有一堆系统,让我们打电话给他们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
}
}
Run Code Online (Sandbox Code Playgroud)
抽象
public abstract class System
{
public virtual void GetPropertyInformation()
{
//Standard Code here
}
}
public class B : System
{
public override void GetPropertyInformation()
{
//B specific code here
}
}
Run Code Online (Sandbox Code Playgroud)
超级基类中的虚方法
public class System
{
public virtual void GetPropertyInformation()
{
//System Code
}
}
public class C : System
{
public override void GetPropertyInformation()
{
//C Code
}
}
Run Code Online (Sandbox Code Playgroud)
一个问题,虽然它可能是愚蠢的,让我们假设我采用抽象方法,我想覆盖它GetPropertyInformation,但我需要传递一个额外的参数,这是可能的还是我必须在抽象类中创建另一个方法?例如,GetPropertyInformation(x)
你的抽象和"超级基础"方法并没有太大的不同.您应始终将基类抽象化,并且您可以提供默认实现(虚拟方法)或不提供(抽象方法).决定因素是你是否想要拥有基类的实例,我想不是.
所以它在基类和接口之间.如果您的A,BC类之间存在强耦合,那么您可以使用基类,可能还有一个常见的实现.
如果A,B,C类自然不属于单个"族",则使用接口.
而System没有这样的好名字.
并且在覆盖时无法更改参数列表.也许默认参数可以帮助,否则你只需要2次重载GetPropertyInformation().