gpt4 book ai didi

c# - 如何在c#中调用基重载方法?

转载 作者:太空狗 更新时间:2023-10-30 00:35:24 25 4
gpt4 key购买 nike

我有以下类层次结构

class A
{
public virtual string M()
{
return M(String.Empty);
}

public virtual string M(string s)
{
return M(s, false);
}

public virtual string M(string s, bool flag)
{
// Some base logic here
}
}

class B:A
{
public override string M(string s, bool flag)
{
string baseResult = base.M(s);

// Derived class logic here
}
}

B类可以在两种情况下使用:

1)

A b = new B();
string result = b.M();

2)

B b2 = new B();
string result2 = b2.M(someString, true);

两种情况都因 StackOverflowException 而崩溃。发生这种情况是因为在 B.M(string s, bool flag) 内部调用的 base.M(s) 将再次调用 B.M(string s, bool flag)。

有什么好的方法可以避免这种情况吗?

我知道如果我调用 base.M(s, flag) 一切都会正常,但是如果其他人开发了派生类并访问 base.M(s) 怎么办?我不想在这里留下 StackOverflowException 的可能性。

解决方案

现在我的层次结构看起来像

class A
{
public string M()
{
return M(String.Empty, false);
}

public virtual string M(string s, bool flag)
{
// Some base logic here
}
}

class B:A
{
public override string M(string s, bool flag)
{
string baseResult = base.M(s, flag);

// Derived class logic here
}
}

最佳答案

通常这里的技巧是有一个 virtual(通常是参数最多的那个),而且这是唯一一个你垂直调用的。其他的可能是非虚拟的,只需调用具有适当默认值的“主要”。

关于c# - 如何在c#中调用基重载方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4835969/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com