我试图找出是否可以在基类中使用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()中打印出这一行
答案 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");
}
}