能否将部分类链接到 C# 中的多个类

问题描述 投票:0回答:1

我正在编写一系列都实现相同接口的类。在编写它们时,我逐渐意识到它们都使用相同的逻辑。考虑到接口的设计,我想不出一种方法来重构类以使用通用接口,所以我认为 Partial 可以工作。

接口:

public interface IStepStatus : INotifyPropertyChanged
{
   event EventHandler StepCompleted;
   event EventHandler StatusUpdate;
}
public abstract class Step1 : IStepStatus
{
    //Methods unique to this step
}
public abstract class Step2 : IStepStatus
{ 
    //Methods unique to this step
}

我的实现:

public class ImplStep1 : Step1
{
   private bool Completed()
   {
      //Several lines of logic common across both Steps
      //Trigger StepCompleted
   }
   private void StatusUpdate(string statusMessage)
   {
      //Several lines of logic common across both Steps
      //Trigger StatusUpdate
   }
   public event EventHandler StepCompleted;
   public event EventHandler StatusUpdate;

   //Content unique to this class
}
public class ImplStep2 : Step2
{
   //Same logic for Completed and StatusUpdate

   //Content unique to this class
}
c# partial code-duplication
1个回答
0
投票

Partial
是一种将类的实现拆分为两个不同的 files 的方法 - 通常,当一个文件由某些工具生成时,另一个文件是您放置其他内容的地方。这与您在这里描述的内容无关。

将功能组合到一个地方的最明显的方法是您已经使用的继承。例如,

public abstract class Steps : IStepStatus
{
   private bool Completed()
   {
      //Several lines of logic common across both Steps
      //Trigger StepCompleted
   }
   private void StatusUpdate(string statusMessage)
   {
      //Several lines of logic common across both Steps
      //Trigger StatusUpdate
   }
    ...
}
public class Step1 : Steps
{ 
    //Methods unique to this step
}

public class Step2 : Steps
{ 
    //Methods unique to this step
}

由于您将问题集中在部分上,所以我认为这与您想要做的事情无关 - 我可能误解了真正的问题。如果是这样,请发表评论或更新问题。

另外,从你的问题中不确定为什么你的

Step1
Step2
课程是
abstract
。显然,如果他们应该,你可以使
Steps
类抽象。

© www.soinside.com 2019 - 2024. All rights reserved.