gpt4 book ai didi

c# - 抽象基类或辅助类

转载 作者:太空狗 更新时间:2023-10-29 23:09:17 24 4
gpt4 key购买 nike

我今天刚刚了解了一些关于组合优于继承的知识。我想知道我是否应该将这个概念应用到我最近写的东西中。

我们以前有两个几乎相同的类,除了几个小差异。它们包含一些基本的数据库访问功能,但对不同(但相关)的对象类型进行操作。所以我们以前的类(class)结构如下:

class BallMillDBHandler{

public BallMillDBHandler(){ ... }

public void InsertTool(BallMill tool) { ... }
public BallMill QueryTool(string toolID) { ... }
public void UpdateTool(BallMill tool) { ... }
public void DeleteTool(string toolID) { ... }
}

class DiamondToolDBHandler{

public DiamondToolDBHandler(){ ... }

public void InsertTool(DiamondTool tool) { ... }
public DiamondTool QueryTool(string toolID) { ... }
public void UpdateTool(DiamondTool tool) { ... }
public void DeleteTool(string toolID) { ... }
}

我将大部分几乎重复的方法重构为一个 BaseToolDBHandler() 类,并从其他两个继承它,提供一些抽象方法和属性来处理访问差异数据库参数本身。

BaseToolDBHandler 成为一个辅助类,包含在数据库访问器中,并为它们提供一个以前抽象属性/方法的公共(public)接口(interface)是否有意义?或者我应该把它留作继承?

最佳答案

这看起来像是一个通过基类/接口(interface)对泛型和继承都有利的场景。

class DBHandler<TTool> where TTool : ToolBase // or ITool
{
public DBHandler(){ ... }

public void InsertTool(TTool tool) { ... }
public TTool QueryTool(string toolID) { ... }
public void UpdateTool(TTool tool) { ... }
public void DeleteTool(string toolID) { ... }
}

如果需要,您可以创建一个基类(可选抽象)或一个接口(interface)用作类型约束,以保证您需要工具在方法主体中包含某些成员。

示例:

var handler = new DBHandler<BallMill>();
BallMill value = handler.QueryTool("xyz");
value.SomeProperty = "New Value";
handler.UpdateTool(value);

关于c# - 抽象基类或辅助类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12585128/

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