使用通用方法实现接口

我在这一个空白,似乎无法find我写的任何以前的例子。 我试图实现一个通用的接口类。 当我实现接口时,我认为有些东西不能正常工作,因为Visual Studio会不断产生错误,说我并没有实现通用接口中的所有方法。

以下是我正在使用的一个存根:

public interface IOurTemplate<T, U> { IEnumerable<T> List<T>() where T : class; T Get<T, U>(U id) where T : class where U : class; } 

那么我的class级应该怎样?

您应该重新修改您的界面,如下所示:

 public interface IOurTemplate<T, U> where T : class where U : class { IEnumerable<T> List(); T Get(U id); } 

然后,你可以把它作为一个通用的类来实现:

 public class OurClass<T,U> : IOurTemplate<T,U> where T : class where U : class { IEnumerable<T> List() { yield return default(T); // put implementation here } T Get(U id) { return default(T); // put implementation here } } 

或者,您可以具体实施:

 public class OurClass : IOurTemplate<string,MyClass> { IEnumerable<string> List() { yield return "Some String"; // put implementation here } string Get(MyClass id) { return id.Name; // put implementation here } } 

我想你可能想重新定义你的界面,如下所示:

 public interface IOurTemplate<T, U> where T : class where U : class { IEnumerable<T> List(); T Get(U id); } 

我想你想要的方法使用(重新使用)generics接口的generics参数,他们声明; 而且你可能不希望用他们自己的(不同于接口的)generics参数来生成generics方法。

鉴于我重新定义它的接口,你可以定义一个类如下:

 class Foo : IOurTemplate<Bar, Baz> { public IEnumerable<Bar> List() { ... etc... } public Bar Get(Baz id) { ... etc... } } 

或者像这样定义一个generics类:

 class Foo<T, U> : IOurTemplate<T, U> where T : class where U : class { public IEnumerable<T> List() { ... etc... } public T Get(U id) { ... etc... } } 

– 编辑

其他的答案是更好的,但是请注意,如果你对它的外观感到困惑,你可以让VS为你实现接口。

过程如下所述。

那么,Visual Studio告诉我应该看起来像这样:

 class X : IOurTemplate<string, string> { #region IOurTemplate<string,string> Members IEnumerable<T> IOurTemplate<string, string>.List<T>() { throw new NotImplementedException(); } T IOurTemplate<string, string>.Get<T, U>(U id) { throw new NotImplementedException(); } #endregion } 

请注意,我所做的只是编写接口,然后点击它,然后等待小图标popup,让VS为我生成实现:)