簡體   English   中英

注入繼承

[英]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); 您將獲得此訂單:

  1. TheBaseClass.CallTheProcess
  2. FirstClass.Process
  3. TheLastClass.Process( //other operations部分)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM