抽象类,如何避免代码重复?

use*_*174 5 c# inheritance abstract-class

我有以下代码

internal abstract class Base
{
    public DateTime Time;
    public string Message;
    public string Log;
    public abstract void Invoke(string message);
}

internal class SubA : Base
{
    public override void Invoke(string message)
    {
        Time = DateTime.Now;
        // Do A
    }
}

internal class SubB : Base
{
    public override void Invoke(string message)
    {
        Time = DateTime.Now;
        // Do B
    }
}
Run Code Online (Sandbox Code Playgroud)

我有这些继承自Base类的SubA和SubB类,你可以看到我有一个重复它的代码,它设置了Time,有没有办法将时间设置移动到基类?

Kla*_*sen 5

你可以这样做:

internal abstract class Base
{
    public DateTime Time;
    public string Message;
    public string Log;
    public void Invoke(string message){
         Time = DateTime.Now;
         this.InvokeInternal(message);
    }
    protected abstract void InvokeInternal(string message);
}

internal class SubA : Base
{
    protected override void InvokeInternal(string message)
    {
        // Do A
    }
}

internal class SubB : Base
{
    protected override void InvokeInternal(string message)
    {
        // Do B
    }
}
Run Code Online (Sandbox Code Playgroud)


dkn*_*ack 3

有很多可能的解决方案。

这取决于您希望何时设置此属性。

如果您想要立即获得它,您可以在Base类的构造函数中执行此操作。

internal abstract class Base
{
    public DateTime Time;
    public string Message;
    public string Log;
    public abstract void Invoke(string message);

    public Base()
    {
        Time = DateTime.Now;
    }
}

internal class SubA : Base
{
    public override void Invoke(string message)
    {
        // Do A
    }
}

internal class SubB : Base
{
    public override void Invoke(string message)
    {
        // Do B
    }
}
Run Code Online (Sandbox Code Playgroud)