gpt4 book ai didi

c# - 基类 - 是否应实现所有方法

转载 作者:太空宇宙 更新时间:2023-11-03 18:37:56 25 4
gpt4 key购买 nike

如果我从基类继承,是否有一条规则规定“仅在您需要实现/使用所有(或 X%)基类功能/方法的地方继承”?我明白,如果我继承了那么我就继承了很多,但这并不意味着我必须全部使用它。

假设以下模式:

public abstract class Template
{
public void LoadCustomer()
{
//Load customer logic
}
public virtual void LoadGrid()
{
//Logic
}
public virtual void other()
{ //logic }

public virtual void other2()
{ //logic }

public virtual void other3()
{ //logic }

public string WelcomeMessage()
{
//perform lots of complex logic
return "Hello and welcome";
}
}

如果我的应用程序的一部分只想显示 WelcomeMessage(),从上面的模板类继承是否是错误的(我知道我只能继承一次,但这不是这个问题的因素)(另请注意,我故意不包含任何抽象方法/字段)。

最佳答案

在我“看到曙光”之前,我在很多项目中都走上了这条路。

is there a rule which states "only inherit where you need to implement/use all (or X%) of the base classes functionality/methods"?

是也不是。不,没有规则,但是是的,有一种方法可以做你想做的事。它被称为优先于继承的组合,这意味着您需要将每个功能 block 分解为一个类,然后(在当前的子类中)创建一个实例类,然后将所需的工作委派给它。使用此技术将使您可以轻松地修改当前父类(super class)的内容,而不会对当前的子类产生链式 react 。

底线,当有疑问时(或者如果它只是感觉好笑)不要使用继承。这体现在 Liskov substitution principle它指出任何子类都应该是它的父类(super class)的完整和适当的替代品。 (即没有 Boat 子类 Plane 只是因为它们都可以载人)。

要获得更多有趣的阅读,请查看 SOLID软件工程范式。

关于c# - 基类 - 是否应实现所有方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12723931/

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