假设我有一个 C# 泛型类,其声明如下所示:
public abstract class DtoQuery<T> where T : class
{ }
现在,类型参数始终是“Dto”类。我有很多这样的东西,但“问题”是它们没有任何共同点。它们都只有一堆(不同的)公共(public)属性,没有方法。
理想情况下,我想让我的DtoQuery<T>
class 仅接受此类“Dto”类作为其类型参数。所以我要么需要创建一个空接口(interface) IDto
或空 abstract class Dto
.
问题:我应该选择哪一个?注意:Dto 类永远不会扩展任何其他内容或相互扩展!
(对于好奇的人来说:我保证我不会构建一些极其愚蠢和愚蠢的东西,这是测试项目中的实用功能,不会用于生产代码)。
最佳答案
假设您(无论出于何种原因)有一个如下所示的层次结构:
public class Person { }
public class Employee : Person { }
public class Boss : Person { }
现在想象一下,我们不希望将 Person
视为 DTO - 我们只希望 Employee 和 Boss 成为 DTO。
在这种情况下,不可能使用抽象类来表示 DTO,因为在 C# 中只能从一个父类继承。
这是为什么使用界面更好的客观原因。主观上,接口(interface)也更好,因为抽象类的目的是提供一些功能。除此之外,与接口(interface)相比没有任何好处。
经验法则是:当您不确定时,请始终使用界面。仅当您需要实现时才使用抽象类。
关于c# - 用作类型参数约束的空接口(interface)或空基类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37300581/