C# 在控制台应用程序中使用某些条件重写方法
我正在创建一个控制台应用程序。我有一个类,我在其中编写了一些方法。现在我想在另一个类中重写该类的一些方法。但只有在满足条件的情况下,才应覆盖此项 比如说,C# 在控制台应用程序中使用某些条件重写方法,c#,.net,overriding,C#,.net,Overriding,我正在创建一个控制台应用程序。我有一个类,我在其中编写了一些方法。现在我想在另一个类中重写该类的一些方法。但只有在满足条件的情况下,才应覆盖此项 比如说, public partial Class MainClass { public string GetPath() { string temp = Method1(); return temp; } protected virtual string Method1() {
public partial Class MainClass
{
public string GetPath()
{
string temp = Method1();
return temp;
}
protected virtual string Method1()
{
//logic
}
}
若满足某些条件,则只应调用重写的方法
public partial class ChildClass : MainCLass
{
public override void Method1()
{
//MY Logic
}
}
我怎样才能做到这一点?可以这样做吗?在
ChildClass
中,您可以执行以下操作:
public partial class ChildClass : MainCLass
{
public override void Method1()
{
if(condition)
{
base.Method1();
return;
}
//YOUR LOGIC
}
}
示例
public class A
{
public virtual void MethodA()
{
Console.WriteLine("A:MethodA");
}
}
public class B : A
{
public bool CallBase { get; set; }
public B()
{
CallBase = false;
}
public override void MethodA()
{
if (CallBase)
{
base.MethodA();
return;;
}
Console.WriteLine("B:MethodA");
}
}
class Program
{
static void Main(string[] args)
{
A a = new A();
B b = new B();
a.MethodA();
b.MethodA();
b.CallBase = true;
b.MethodA();
A c = new B();
c.MethodA();
A d = new B(true);
d.MethodA();
Console.ReadKey();
}
}
输出
A:方法A
B:方法A
A:方法A
B:方法A
A:方法A
您可以有条件地调用base.Method1()或其他什么(我把这些调用混为一谈)。但关键是,如果你需要这样做,那么你的OOP是错误的。也许你不应该做覆盖,但是使用常规函数,并利用多态性,根据你想要调用的方法,将对象强制转换为任意一种类型。@AlexanderMP comment的+1。我删除了console application“标记,因为这与您当前的问题毫无关系(在桌面或web应用程序中也是如此),所以您不能返回
void
;因此base.Method1();return;
是正确的syntax@Karol:我已将所需的return
添加到您的implemenation@Karol:当我调用Method1()时,它直接调用我的main方法,而不是overrided。为什么呢?@Karol:实际上我是从我的第一个类的方法调用overrided方法。例如,方法C存在于类A中,我是从这个方法C调用overrided方法。@Ankita你只能从子类调用重载方法,在基类中你不能调用子类方法。