[英]Inject into inheritance
是否有可能在繼承的類進行重構打電話,我需要做一些額外的事情,在上下文TheFirstClass
之前和之后有TheLastClass
進程上下文。 理想情況下,我不想在TheLastClass
所有實例中重命名流程覆蓋。 我試圖添加另一個抽象類,但是繼承阻止了另一個同名抽象類。
void Main()
{
var context = new ContextClass();
var LastClass = new TheLastClass();
LastClass.CallTheProcess(context);
}
// Define other methods and classes here
abstract class TheBaseClass
{
public abstract void Process(ContextClass context);
public void CallTheProcess(ContextClass context)
{
// other necessary stuff
context.test = "Base Class";
Process(context);
}
}
class TheFirstClass : TheBaseClass
{
//public abstract void Process(ContextClass context)
public override void Process(ContextClass context)
{
context.test = "success";
Process(context);//How can I call inherited overrides? and not infinite loop
}
}
class TheLastClass : TheFirstClass
{
public override void Process(ContextClass context)
{
//do stuff with the context
if(context.test == "success")
{
"ThisWorked".Dump();
//how do I get here?
}
}
}
class ContextClass
{
public string test;
}
您可以使用base
關鍵字。
void Main()
{
var context = new ContextClass();
var LastClass = new TheLastClass();
LastClass.CallTheProcess(context);
}
abstract class TheBaseClass
{
public abstract void Process(ContextClass context);
public void CallTheProcess(ContextClass context)
{
this.Process(context);
// other necessary stuff
context.test = "Base Class";
}
}
class TheFirstClass : TheBaseClass
{
public override void Process(ContextClass context)
{
context.test = "success";
// some operations
}
}
class TheLastClass : TheFirstClass
{
public override void Process(ContextClass context)
{
base.Process(context); // from the TheFirstClass
// other operations
}
}
然后,如果您調用LastClass.CallTheProcess(context);
您將獲得此訂單:
//other operations
部分)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.