泛型 - 将实例作为基类型传递

时间:2015-04-09 06:56:32

标签: c# templates generics

我目前正在为新应用程序开发数据访问层,它不是一个大型应用程序,所以我决定采用Dao模式,将每个Model项目转换为Dao通过存储的查询将项目存储到数据库之前的项目
尽可能地使用通用接口和抽象类来消除重复操作,但现在我已经遇到了一些障碍。

我们所拥有的是Dao Conversion类的接口,如下所示:

internal interface IDaoConverter<TModel, TDao>
    where TModel : ModelItem
    where TDao : DaoItem
{
    ToDao(TModel inModel);
    inDao);
}

到目前为止这个工作正常并且适合它的功能,你在类定义中指定了Model类型和Dao类型它将被转换为(1-1关系),并且创建函数以匹配这些类型。这些Dao转换器的实例在工厂中进行,以便于检索。

我想要的下一件事是创建将使用它的数据访问类,我想以通用的方式设计它。

我之后要问Dao转换器工厂我想要一个可以处理特定类型的Model项目的Dao转换器,但到目前为止我找不到指定方法的方法。

public abstract class AbstractDataAccess<T> where T: ModelItem
{
    protected IDaoConverter<T,?> Converter;

    public void Init(IDaoConverter<T,?> inConverter)
    {
        Converter = inConverter;
    }
}

我基本上希望能够用类中我想要的任何类型替换问号。由于这个原因,我现在不得不完全写出每个数据访问类。

1 个答案:

答案 0 :(得分:0)

如果在初始化时给出转换器,则可以使方法访问DaoConverter摘要,并派生一个(可能是抽象的)类,该类具有表示Dao-Type的第二个类型参数。

public abstract class AbstractDataAccess<T, TDao> : AbstractDataAccess<T> where ...