BCS*_*BCS 28 c# abstract-class interface
我有这个C#代码:
abstract class MyList : IEnumerable<T>
{
public abstract IEnumerator<T> GetEnumerator();
//abstract IEnumerator IEnumerable.GetEnumerator();
}
Run Code Online (Sandbox Code Playgroud)
就是这样,我得到:
'Type'没有实现接口成员'System.Collections.IEnumerable.GetEnumerator()'.
删除评论,我得到:
修饰符'abstract'对此项无效
如何制作显式实现摘要
Jon*_*eet 35
有趣 - 我不确定你能不能.但是,如果这是你真正的代码,你有没有希望实现非通用GetEnumerator()以任何方式等通过调用通用的人比?
我这样做:
abstract class MyList<T> : IEnumerable<T>
{
public abstract IEnumerator<T> GetEnumerator();
IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
}
Run Code Online (Sandbox Code Playgroud)
这使您免于必须在每个派生类中实现它的繁琐 - 这无疑都会使用相同的实现.
Ste*_*sen 17
虽然显式接口成员可能不是抽象(或虚拟),但它可以根据抽象(或虚拟)成员1来实现:
public abstract class Foo: IEnumerable {
IEnumerator IEnumerable.GetEnumerator() {
return getEnumerator();
}
protected abstract IEnumerator getEnumerator();
}
public class Foo<T>: Foo, IEnumerable<T> {
private IEnumerable<T> ie;
public Foo(IEnumerable<T> ie) {
this.ie = ie;
}
public IEnumerator<T> GetEnumerator() {
return ie.GetEnumerator();
}
protected override IEnumerator getEnumerator() {
return GetEnumerator();
}
//explicit IEnumerable.GetEnumerator() is "inherited"
}
Run Code Online (Sandbox Code Playgroud)
我发现在强类型的ASP.NET MVC 3局部视图中需要这个,它不支持泛型类型定义模型(据我所知).
| 归档时间: |
|
| 查看次数: |
7121 次 |
| 最近记录: |