c# - 我在这里需要抽象类或接口(interface)吗(或者两者都不需要)?

标签 c# oop interface abstract-class

我有一个仓库。有时我想通过名称查找盒子位置,有时通过描述,有时通过 UPC,也许是其他东西,等等。这些查找方法中的每一个都调用相同的各种私有(private)方法来查找信息以帮助定位数据。

例如,upc 调用一个私有(private)方法来查找 rowid,name 也是如此,X 也是如此。所以我需要为所有这些方法提供该方法。我可能会使用该 rowid 以某种方式查找货架位置(这只是一个示例。)

但我的问题是我应该有一个抽象类(或其他东西),因为我正在以不同的方式查找我的盒子。

换句话说,假设我的查找代码对于 UPC 和位置非常相似。每个方法都可以调用某些内容(select * from xxxx where location =,或 select * from xxxx where upc =)。我可以在同一个类中创建两个不同的方法

LocateByUPC(string upc)...
LocateByLocation(string location)...
LocateByDescription(string description)

...再说一遍,这将属于一个大类

我是否有任何理由想要一个能够容纳的 super 类

abstract class MySuper
{

properties...

LocateBox(string mycriteria)...

}

然后继承它并创建第二个类来重写我需要的任何版本的 LocateBox 方法?

我不知道为什么我想这样做,除了它看起来很OOD,这实际上意味着如果我有充分的理由我想这样做。但是,我知道没有任何优势。我只是发现我的类变得越来越大,我只是稍微改变了方法的名称和一点代码,这让我觉得继承可能会更好。

如果重要的话,使用 C#。

编辑 - 如果我只给某人一个没有源代码但有类定义的 .dll,我会这样做吗?类(class)定义。会告诉我的属性等以及要覆盖哪些方法。

最佳答案

都不是

使用抽象类和接口(interface)都不会简化协议(protocol),即你最终仍然会得到一堆 LocateXXX 方法

我建议使用通用的 Locate(string criteria) 方法作为基础,并且只为您知道会经常使用的方法定义专门的方法签名;如果您需要的话,泛型可以成为 future 扩展的包罗万象的东西(并且依赖泛型简化了编码和测试)

关于c# - 我在这里需要抽象类或接口(interface)吗(或者两者都不需要)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/682827/

相关文章:

Java OOP 改变二维矩阵的位置?

C#:需要实现两个接口(interface)的参数的函数的首选模式

c# - 为什么我应该使用属性而不是实现接口(interface)?

c# - 检测它是否是应用程序的最后一个实例 c#

c# - 将 Razor 与 Jquery 合并以实现自动完成功能

c# - 返回 IQueryable 类型 : The entity or complex type '' cannot be constructed in a LINQ to Entities query

c++ - 来自多个类的好友模板函数

c# - 使用 MVVMCross 在 WPF 中捕获 OnExit 事件

python - 如何在 pygame 中连续生成并跟踪多个具有时间延迟的随机对象?

Java:类型参数必须实现接口(interface)