我有一个界面:
public interface ITableData
{
List<T> ListAll<T>() where T : TableData;
void Insert(Object o);
}
我的班级实现了界面:
public class BookData:ITableData
{
public List<T> ListAll<T>() where T : TableData
{
//some code here
}
}
事实上,我希望得到如下结果:
public class BookData:ITableData
{
public List<Book> ListAll()
{ List<Book> bookList =XXXXXX;
//some code here
return bookList}
}
如何实现? 谢谢大家。
答案 0 :(得分:3)
将泛型参数移动到接口而不是方法:
public interface ITableData<T> where T : TableData
{
List<T> ListAll();
void Insert(Object o);
}
public class BookData : ITableData<Book>
{
public List<Book> ListAll()
{
List<Book> bookList =XXXXXX;
//some code here
return bookList;
}
}
答案 1 :(得分:1)
出现问题是因为
public List<Book>
不是接口方法的有效实现
List<T> ListAll<T>() where T : TableData
原因是您的界面明确指出T
可以是任何TableData
。由于您的方法仅适用于Book
个对象,而不适用于任何TableData
对象,因此会出现错误。
解决方案是实现通用接口:
public interface ITableData<T> where T : TableData
// Implement your methods using T
然后你可以在你的班级中实现:
public class BookData:ITableData<Book>