1

我有一个类似的界面:

 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}
}

如何做到这一点?谢谢大家。

4

2 回答 2

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;
    }
}
于 2013-06-11T09:01:32.047 回答
1

出现您的问题是因为

public List<Book>

不是接口方法的有效实现

List<T> ListAll<T>() where T : TableData

这样做的原因是您的界面明确声明T可以是 any TableData。由于您的方法仅适用于Book对象而不适用于任何TableData对象,因此您会收到错误消息。

解决方案是实现一个通用接口:

public interface ITableData<T> where T : TableData
// Implement your methods using T

然后你可以在你的类中实现:

public class BookData:ITableData<Book>
于 2013-06-11T09:03:44.967 回答