是否可以使用基类中的if条件影响子类

时间:2018-08-21 10:22:54

标签: c# inheritance

我试图找出是否可以在基类中使用if语句,并根据该值继续执行父类方法或仅返回。

这是我做的一个小例子。

主类创建两个父类

public class Program
{
    public static void Main()
    {
        Class1 c1 = new Class1();

        Class2 c2 = new Class2();

        c1.test();

        c2.test();

    }
}

这是包含要进行ovveridden的方法的基类

public class baseClass
{

    public bool b = true;

    public virtual void test()
    {
        if(!b)
        {
            Console.WriteLine("b is true returning");
            return;
        }
    }
}

父级1

public class Class1 : baseClass
{
    public override void test()
    {
        base.test();

        //the below line should only execute if b is true
        Console.WriteLine("Executing a method unique to Class1");
    }
}

父级2

public class Class2 : baseClass
{
    public override void test()
    {
        b = false;
        base.test();

        //the below line should only execute if b is true
        Console.WriteLine("Executing a method unique to Class2");
    }
}

我在那里确实简化了它,看起来似乎毫无意义,但是我试图解释我想对代码做什么。

基本上,在我的基类中,我将检查列表是否为空,如果它只是我想返回而不是继续执行父类方法。但是,如果它不为空,则每个父类将对列表执行不同的操作。

编辑 这是一个小提琴,我想要实现的是它不应从Class2.test()中打印出这一行

https://dotnetfiddle.net/p67UgJ

1 个答案:

答案 0 :(得分:3)

您需要将要覆盖的方法部分分开,而不是覆盖整个方法。

public class baseClass
{
    public bool b = true;

    public void test()
    {
        if(!b)
        {
            BitThatNeedsToChange();
            return;
        }
    }

    protected virtual void BitThatNeedsToChange()
    {
        Console.WriteLine("b is true returning");
    }
}

在派生类中,您将覆盖protected virtual方法:

public class Class1 : baseClass
{
    protected override void BitThatNeedsToChange()
    {
        //the below line should only execute if b is true
        Console.WriteLine("Executing a method unique to Class1");
    }
}