【发布时间】:2013-03-09 15:27:57
【问题描述】:
在调用通用方法来存储对象时,有时需要以不同方式处理特定类型。我知道您不能基于约束进行重载,但任何其他替代方案似乎都存在其自身的问题。
public bool Save<T>(T entity) where T : class
{ ... some storage logic ... }
我想做的事情如下:
public bool Save<SpecificClass>(T entity)
{ ... special logic ... }
过去,我们的团队创建了“一次性”方法来保存这些类,如下所示:
public bool SaveSpecificClass(SpecificClass sc)
{ ... special logic ... }
但是,如果您不知道该功能的存在,并且您尝试使用通用(保存),那么您可能会遇到许多本应“一次性”解决的问题。如果新的开发人员出现,发现泛型存在问题,并决定使用自己的一次性功能来解决问题,情况可能会变得更糟。
所以...
有哪些选项可以解决这个看似常见的问题?
我已经查看并使用了 UnitOfWork,现在这似乎是 唯一 真正解决问题的选项 - 但似乎用大锤攻击苍蝇。
【问题讨论】:
-
与 C++ 不同,C# 不允许模板特化
-
这些 Save() 方法是放在一些轻量级的帮助类中还是放在一些实体类中?我只是在考虑继承,但确保这是正确的方式很重要,因为继承并不总是正确使用
标签: c# generics overloading