2013-08-21 66 views
1

我有以下类:继承接口的通用类

public class DataInterop <T> where T : ITableAdapter 
{ 
    private ITableAdapter tableAdapter; 

    public DataInterop(T tableAdapter) 
    { 
     this.tableAdapter = tableAdapter; 
    } 
} 

在ITableAdapter接口都喜欢读(定义的方法),写(...),更新(...),删除(...),...

现在我想的类DataInterop有从ITableAdapter接口的所有方法。

是否有可能为通用级,从一个接口继承?

+0

当然,为什么不能它?只要像在非泛型类中一样实现这些方法即可......问题是什么?之后的'DataInterop ' – Servy

+0

当然,只需添加' -interface-and-constrains- –

+0

可能重复ITableAdaper':http://stackoverflow.com/questions/6223075/how-do-i-define-a-generic-class-that-implements-an –

回答

3

你只需要后添加: ITableAdaperDataInterop<T>

public class DataInterop<T>: ITableAdapter where T: ITableAdapter 
{ 
    private ITableAdapter tableAdapter; 

    public DataInterop(T tableAdapter) 
    { 
     this.tableAdapter = tableAdapter; 
    } 
} 

(它看起来像你实现一个Adapter PatternDecorator Pattern

2

是的,它是可能的,当你处理的类的实例,而不知道在运行时的具体类型,它是特别有用。

的语法是:

public class DataInterop <T> : ITableAdapter where T : ITableAdapter 
+0

该死的..方式太迟;) – mnkypete

+0

所以这里发生了什么。 DataInterop的任务是在ITableAdapter接口中实现任何东西,通过未知类型参数T.未知类型参数T被约束为从Interace派生,DataAdapter被分配用于在T中实现。得知告诉你,我对意图/有用性感到困惑这个的。 –

+0

正如Matthew在上面提到的那样,当实现装饰器或适配器模式时,这可能是有用的,当声明类将内部ITabelAdapter添加到逻辑时,但应该可以像使用表适配器本身一样使用。这样,类可以通过简单地调用内部ITableAdapter来依赖基本逻辑。 – mnkypete

1

Ofcourse就可以了。样品布局 -

public interface IBar 
{ 
    string Name { get; set; } 
} 
public class Foo<T> : IBar 
{ 
    public string Name { get; set; } 
}