我有一个基础对象抽象类和一个基础对象集合类,供一些业务对象继承。我试图弄清楚如何将基础对象类型传递给集合类(和其他方法)。我已经能够通过在接口中包装类来解决这个问题,但我想知道是否有其他方法可以做到这一点,或者如果使用接口是最好的方法。我认为我的问题可能会从下面的代码中更有意义。
我有一个基类定义 -
public abstract class BaseObject<TYPE,KEY>:where TYPE:BaseObject<TYPE,KEY>, new()
public KEY ObjectId {get;protected set; }
我有一个继承自BaseObject
的类public class Customer : BaseObject<Customer,Guid>
我的基础集合类是 -
public abstract class BaseObjectCollection<T> : List<T> where T: BaseObject, new()
我在其他类中也有一些想要引用这个基类的方法 -
public bool ValidateRule(BaseObject dataObject) {etc...}
答案 0 :(得分:1)
如果你在其他类中使用基类而不是泛型,那么当你将它传递给像ValidateRule这样的方法时,我担心你必须指定对象的类型和关键参数。 / p>
在此设计中,由基础对象实现的接口可能是最合适的解决方案。我们在代码中广泛使用这种模式,并且效果很好。
您可以探索的另一个项目是通过将Key作为可覆盖(或必须覆盖)属性(默认为字符串或int或任何可能适当的值)移动到类中来略微降低基类的复杂性。我们发现这种方法(我们强制所有集合键都是字符串)显着降低了类的复杂性。