gpt4 book ai didi

c# - 抽象类与调用基础

转载 作者:行者123 更新时间:2023-11-30 15:25:01 24 4
gpt4 key购买 nike

我需要让用户对某项功能有一定程度的控制权。所以我想部分实现一个用户可以完全实现的类。我想到了这个解决方案。

public abstract class A
{
protected void FunctionA()
{
// My implementation here
FunctionB();
}

protected abstract void FunctionB();
}

public class B : A
{
protected override void FunctionB()
{
// User implementation here
}
}

另一种解决方案是这个

public class A
{
protected virtual void FunctionB()
{
// My implementation here
}
}

public class B : A
{
protected override void FunctionB()
{
base.FunctionB();
// User implementation here
}
}

有什么理由我应该使用其中一种解决方案而不是另一种?它提供某种优势吗?有人可以告诉我什么时候应该使用一种解决方案而不是另一种解决方案吗?

最佳答案

您的第一个解决方案实际上是一个众所周知的模式,称为 Template Method pattern .如果您想确保执行基本方法,这是一个很好的方法(因为 FunctionA 除了调用 FunctionB 之外还可能做其他事情)。

在第二种解决方案中,覆盖方法可以不调用基方法。根据您的情况,它可能合适,也可能不合适。

关于c# - 抽象类与调用基础,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31908487/

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