何时使用哪种通用接口定义?

时间:2014-06-05 12:55:12

标签: c# generics interface

我目前想知道何时使用哪种类型的通用接口定义。我们以此为例:

// (I)
public interface IStorage<T>
        where T: class, new()
{
        void SaveTo(string fileName, T what);
        T LoadFrom(string fileName);
}

// (II)
public interface IStorage
{
        void SaveTo<T>(string fileName, T what)
                where T: class;
        T LoadFrom(string fileName)
                where T: class, new();
}

从我的观点来看,我会说:

  • 如果接口(或conrete类型)中的方法相互依赖并对相同的内部数据进行操作,我将使用(I)。因此我脑子里有IList:IList中的所有方法都在相同的数据上运行。每个conrete类型有一个实例是有意义的。
  • 如果接口(或具体类型)中的方法不相互依赖(因此它们不对相同的内部数据进行操作),我将使用(II)。这意味着,我可以有一个实例并将其用于不同的具体类型。

那么,您怎么看?有最好的做法吗?关于这个的其他想法?

1 个答案:

答案 0 :(得分:0)

考虑关联的逻辑含义的差异。

实现通用接口Interface<Type>的类将与该类型在逻辑上相关联。并且该类引用Type的所有方法也将与之相关联。

这可能很适合代表Builder(模式)的接口。

具有泛型类型方法(Type doSomething<Type>)的类在调用时将具有与指定类型逻辑关联的方法。不同的方法可能需要提供不同的泛型类型。

这可能很适合代表Factory(模式)的接口。