Jas*_*ord 56 c# generics interface
我在这个上画了一个空白,似乎找不到我写的任何先前的例子.我正在尝试用类实现通用接口.当我实现接口时,我认为某些东西不能正常工作,因为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;
}
Run Code Online (Sandbox Code Playgroud)
那我班上应该怎么样?
Ree*_*sey 97
您应该重新设计界面,如下所示:
public interface IOurTemplate<T, U>
where T : class
where U : class
{
IEnumerable<T> List();
T Get(U id);
}
Run Code Online (Sandbox Code Playgroud)
然后,您可以将其实现为泛型类:
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
}
}
Run Code Online (Sandbox Code Playgroud)
或者,您可以具体实现它:
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
}
}
Run Code Online (Sandbox Code Playgroud)
Chr*_*isW 11
我想你可能想重新定义你的界面,如下所示:
public interface IOurTemplate<T, U>
where T : class
where U : class
{
IEnumerable<T> List();
T Get(U id);
}
Run Code Online (Sandbox Code Playgroud)
我想你希望这些方法能够使用(重用)声明它们的通用接口的泛型参数; 并且您可能不希望使用它们自己的(不同于接口的)泛型参数来使它们成为通用方法.
鉴于我重新定义了界面,你可以定义一个这样的类:
class Foo : IOurTemplate<Bar, Baz>
{
public IEnumerable<Bar> List() { ... etc... }
public Bar Get(Baz id) { ... etc... }
}
Run Code Online (Sandbox Code Playgroud)
或者像这样定义一个泛型类:
class Foo<T, U> : IOurTemplate<T, U>
where T : class
where U : class
{
public IEnumerable<T> List() { ... etc... }
public T Get(U id) { ... etc... }
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
78664 次 |
| 最近记录: |