C# 是否可以在基类中使用if条件来影响子类

C# 是否可以在基类中使用if条件来影响子类,c#,inheritance,C#,Inheritance,我试图弄清楚是否可以在基类中使用if语句,并根据值继续执行父类方法或仅返回 这是我举的一个小例子 main类创建两个父类 public class Program { public static void Main() { Class1 c1 = new Class1(); Class2 c2 = new Class2(); c1.test(); c2.test(); } } 这是包含要验证的方法的

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

这是我举的一个小例子

main类创建两个父类

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

        Class2 c2 = new Class2();

        c1.test();

        c2.test();

    }
}
这是包含要验证的方法的基类

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()中的行


您需要分离要重写的方法的一部分,而不是重写整个方法

public class baseClass
{
    public bool b = true;

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

    protected virtual void BitThatNeedsToChange()
    {
        Console.WriteLine("b is true returning");
    }
}
在派生类中,您将重写
受保护的虚拟
方法:

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");
    }
}

您需要分离要重写的方法的一部分,而不是重写整个方法

public class baseClass
{
    public bool b = true;

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

    protected virtual void BitThatNeedsToChange()
    {
        Console.WriteLine("b is true returning");
    }
}
在派生类中,您将重写
受保护的虚拟
方法:

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");
    }
}

您考虑将
test
更改为返回
bool
?然后,您的继承类可以检查
base.test()
的返回值,并使用
if
来决定如何响应。这似乎起作用了,不是吗?您在这里要求什么?您可以使您的
b
-标志
受保护
,以确保只有子类可以修改其值。但除此之外:你的问题是什么?如果(!b)那么打印
b为真返回
。但是
b
不是真的。这一切都非常令人困惑,您考虑将
test
更改为返回
bool
?然后,您的继承类可以检查
base.test()
的返回值,并使用
if
来决定如何响应。这似乎起作用了,不是吗?您在这里要求什么?您可以使您的
b
-标志
受保护
,以确保只有子类可以修改其值。但除此之外:你的问题是什么?如果(!b)那么打印
b为真返回
。但是
b
不是真的。这是非常令人困惑的正确。详细说明:
返回是多余的。此外,当您从虚拟方法返回时,这并不意味着您将在其覆盖中返回相同的值-调用
base.Test()
不会停止派生类中执行
Test()
-这就像调用任何其他方法一样。正确。详细说明:
返回是多余的。此外,当您从虚拟方法返回时,这并不意味着您将在其覆盖中返回相同的值-调用
base.Test()
不会停止在派生类中执行
Test()
-这就像调用任何其他方法一样。