我有
class A<T> where T:DataTable{}
和
class B:TypedTableBase<S>{}
System.Data.TypedTableBase 扩展了 DataTable,但我不能声明
private A<B> a;
编译器抱怨 B 和 DataTable 之间不存在隐式转换,但 B 扩展了 TypedTableBase,后者扩展了 DataTable。
这个没看懂,谁能解释一下?有没有办法完成我想要的?即,声明私有A a;我可以创建一个只返回 (DataTable)b 的隐式转换运算符吗?
编辑 - 短代码示例
和
public partial class NOTIFICATION_RECORDDataTable : global::System.Data.TypedTableBase<NOTIFICATION_RECORDRow> { ... }
和
public class CachedSortableDataSource<T>:ICachedSortableDataSource where T:DataTable {...}
A是CachedSortableDataSource;B 是 NOTIFICATION_RECORDDataTable。
private void InitializeSortableDataGrid()
{
//following line wont compile:
CachedSortableDataSource<Data.FD.NOTIFICATION_RECORDDataTable> ds = new CachedSortableDataSource<FD.DataAccess.FD.NOTIFICATION_RECORDDataTable>();
ds.Adapter = new Data.FDTableAdapters.NOTIFICATION_RECORDTableAdapter();
ds.Cache("220");
sortableDataGrid1.CachedSortableData = ds;
}
编辑 - 不能声明扩展 TYPEDTABLEBASE 的类
这个故事可能还有更多,因为在声明中
NOTIFICATIONRECORDDataTable : global::System.Data.TypedTableBase<NOTIFICATION_RECORDRow>
工具提示说:
此类型用作 Visual Studio 和 XSD.exe .NET Framework 工具生成类型化 System.Data.DataTable 对象的基类,不打算直接从您的代码中使用。
事实上我不能在我的代码文件中声明
public class B:System.Data.TypedTableBase<DataRow> {}
编辑 - 已解决
我无法声明,因为 TypedTableBase 在 system.data.datasetextensions 程序集中。
现在一切都很好。谢谢大家!