SQLite .NET是否接受CreateTable方法中的接口

时间:2014-10-15 09:53:41

标签: c# sqlite generics interface create-table

目前我正在尝试创建一个通用类来创建一个可以将类或接口作为T的表。这是我到目前为止所拥有的:

public class MobileDataBase<T> where T : new()
{
    SQLiteConnection database;

    public MobileDataBase()
    {
        database.CreateTable<T>();
    }
}

当我像这样将一个类输入它时,这很好用:

MobileDataBase<MyClass> database = new MobileDataBase<MyClass>();

但是给了我错误:

  

必须是非抽象类型,其中包含公共无参数构造函数   为了在泛型类型或方法中使用它作为参数

如果我给它参数

MobileDataBase<IMyInterface> database = new MobileDataBase<IMyInterface>();

我使用接口的原因是因为我有两个继承此接口的对象,我想将它们的信息存储在同一个表中,而不是两个单独的...

我还想将泛型类MobileDataBase用于其他不从IMyInterface继承的类:

public class MobileDataBase<T> where T : IMyInterface

不是解决方案

1 个答案:

答案 0 :(得分:1)

这是解决这个问题的方法:

所以MyClass : IMyInterface但当我尝试将界面IMyInterface反馈到我的通用方法时会出现问题,而该方法又会调用CreateTable<T>()

所以这就是我所做的。我创建了一个名为MyBaseClass的基类并实现了它而不是接口..

MyClass : MyBaseClass

现在我可以将MyBaseClass传递给泛型方法没问题。如果您仍然想使用该接口,您可以使MyBaseClass实现接口,如下所示:

MyBaseClass : IMyInterface

使用

时除此之外
database.Insert(object, type)

一样使用它
database.Insert(MyClass,typeof(MyBaseClass)