C# 是否可以在基类中使用if条件来影响子类
我试图弄清楚是否可以在基类中使用if语句,并根据值继续执行父类方法或仅返回 这是我举的一个小例子 main类创建两个父类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(); } } 这是包含要验证的方法的
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()
-这就像调用任何其他方法一样。