我正在编写一系列都实现相同接口的类。在编写它们时,我逐渐意识到它们都使用相同的逻辑。考虑到接口的设计,我想不出一种方法来重构类以使用通用接口,所以我认为 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
}
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
类抽象。