与通用功能的接口

时间:2013-06-11 08:58:27

标签: c# generics interface

我有一个界面:

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

如何实现? 谢谢大家。

2 个答案:

答案 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>