gpt4 book ai didi

C# - 在子类中调用个别行为后在抽象类中添加公共(public)行为

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

我对抽象类很陌生。通常您可以在基类中创建一个成员,然后通过使用 base.Member 在子类中调用它来扩展其逻辑。 .但是我可以反过来做吗?

我有一个 abstract class A具有 IEnumerable<T> 类型的属性:

abstract class A
{
IEnumerable<int> Foo { get; }
}

我希望 A 的派生类返回一个单独的 IEnumerable 并希望使用 .Where 来“过滤”它们以同样的条件。我做了以下操作:

abstract class A
{
public IEnumerable<int> Foo => Bar.Where(x => true);
protected abstract IEnumerable<int> Bar { get; }
}
abstract class B : A
{
protected override IEnumerable<int> Bar {
get { yield return 1; }
}
}

它有效,但这是正确的方法吗?或者我可以只使用一个属性做同样的事情吗?如果我有一些类,它们之间还必须过滤它,感觉特别笨拙,因为我只需要根据我拥有的层数添加越来越多的成员。

最佳答案

这种方法很好。

您在基类中具有所有派生类 (.Where()) 的共同行为,该行为符合 DRY 原则。

然后您将拥有特定于这些类中每个派生类的行为。

It feels especially clunky if I have some classes between which also have to filter it because I'd just have to add more and more members based on the amount of layers I have.

好吧,如果您需要针对不同的情况使用不同的逻辑,那就太好了。

关于C# - 在子类中调用个别行为后在抽象类中添加公共(public)行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47281878/

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