我有
class A<T> where T:DataTable{}
和
class B:TypedTableBase<S>{}
System.Data.TypedTableBase扩展了DataTable,但我无法声明
private A<B> a;
编译器抱怨B和DataTable之间不存在隐式转换,但B扩展了扩展DataTable的TypedTableBase。
我不明白这个,有人可以解释一下吗?有没有办法实现我想要的?即,声明私人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的CANT DECLARE类
故事可能还有更多内容,因为在
的声明中NOTIFICATIONRECORDDataTable : global::System.Data.TypedTableBase<NOTIFICATION_RECORDRow>
工具提示说:
此类型用作Visual Studio和XSD.exe .NET Framework工具生成的typed-System.Data.DataTable对象的基类,不能直接在您的代码中使用。
事实上,我无法在我的代码文件中声明
public class B:System.Data.TypedTableBase<DataRow> {}
编辑 - 已解决
我无法声明,因为TypedTableBase位于system.data.datasetextensions程序集中。
现在一切都很好。 谢谢大家!
答案 0 :(得分:1)
问题是你的类型参数不匹配。拆分线,它变得更加明显:
CachedSortableDataSource<Data.FD.NOTIFICATION_RECORDDataTable> ds = new
CachedSortableDataSource<FD.DataAccess.FD.NOTIFICATION_RECORDDataTable>();
Data.FD.NOTIFICATION_RECORDDataTable
与FD.DataAccess.FD.NOTIFICATION_RECORDDataTable
的类型不同。
如果你做到了:
CachedSortableDataSource<Data.FD.NOTIFICATION_RECORDDataTable> ds = new
CachedSortableDataSource<Data.FD.NOTIFICATION_RECORDDataTable>();
(或者可能使用FD.DataAccess.FD.NOTIFICATION_RECORDDataTable
- 我们不知道你的意思)那么它应该没问题。
答案 1 :(得分:0)
由于TypedTableBase是通用的,因此在使用它时,必须指定实际的数据类型 如在
public class A<T> where T:DataTable
{
}
public class B :TypedTableBase<DataRow>
{
}
class MyClass
{
A<B> asdf = new A<B>();
}
答案 2 :(得分:0)
我无法宣布
class B:TypedTableBase<DataRow>{ }
因为我缺少程序集System.Data.DataSetExtensions
现在一切都很好 - 这不是间接继承问题。
感谢所有人。