【发布时间】:2016-05-05 15:51:32
【问题描述】:
您好,我使用的是 Visual Studio 2005(因为我需要紧凑的框架支持),而我的问题是泛型。
我创建了一个名为 AbstractDAO 的抽象类,这是我的基础
我正在创建其他类,如 DocumentDAO、HeaderDAO 等,它们代表我数据库中的不同表
我想做的是检索一定数量的上述 DAO 类,但作为一个 AbstractDAO(抽象类有许多我希望使用的具体实现)
我试过的是
AbstractDAO<object> dao = new DocumentDAO();
AbstractDAO<object> dao = (AbstractDAO<object>)new DocumentDAO();
AbstractDAO<T> dao = new DocumentDAO();
我需要上述内容,因为我创建了一个函数,可以将数据从一个表传输到另一个数据库中的另一个类似表,所以它(如果有效)会像这样
AbstractDAO<object> dao_local = new DocumentDAO(local_database);
AbstractDAO<object> dao_remote = new DocumentDAO(remote_database);
do_transfer(dao_local,dao_remote)
void do_transfer(AbstractDAO<object> from, AbstractDAO<object> to) {
List<object> items = from.get_all();
to.insert(items);
}
有没有办法做到以上几点?
【问题讨论】:
-
伙计——你怎么能将 B 类型的值分配给 A 类型的变量(至少这是你的第一行所做的......)
-
这就像 c# 基础:AbstractDOA doa = new DocumentDOA();或
-
这只有在你的类层次结构是这样的时候才有效:
-
因为 B 是 A 的实现/子类。使用 AbstractDOA doa = new DocumentDOA() 会抛出异常说使用泛型类型 'AbstractDAO
' 需要 '1' 类型参数 btw 你所说的确实可以在 Java 中使用,但它似乎在 c# 中不起作用