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,有没有办法将时间设置移动到基类?
你可以这样做:
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)
有很多可能的解决方案。
这取决于您希望何时设置此属性。
如果您想要立即获得它,您可以在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)