C#方法的完全限定名是什么?

C#方法的完全限定名是什么?,c#,generics,C#,Generics,在任何类中,如何显式引用类的某个方法 例如,此代码可以工作: class Test : IEnumerable<T> { public IEnumerator<T> GetEnumerator() { return null; } IEnumerator IEnumerable.GetEnumerator() { return GetEnumerator(); } } 类测试:IEnumerable{ 公共IEnumerator GetEnumerato

在任何类中,如何显式引用类的某个方法

例如,此代码可以工作:

class Test : IEnumerable<T> {
    public IEnumerator<T> GetEnumerator() { return null; }
    IEnumerator IEnumerable.GetEnumerator() { return GetEnumerator(); }
}
类测试:IEnumerable{
公共IEnumerator GetEnumerator(){return null;}
IEnumerator IEnumerable.GetEnumerator(){返回GetEnumerator();}
}
但是这个不行

class Test : IEnumerable<T> {
    IEnumerator<T> IEnumerable<T>.GetEnumerator() { return null; }
    IEnumerator IEnumerable.GetEnumerator() { return GetEnumerator(); } // error
}
类测试:IEnumerable{
IEnumerator IEnumerable.GetEnumerator(){return null;}
IEnumerator IEnumerable.GetEnumerator(){返回GetEnumerator();}//错误
}
如何引用方法的通用版本?在Java中,我只想在它前面加上接口名,但在C#中似乎不起作用。除了
((IEnumerable)this.GetEnumerator()
)之外,还有其他方法可以做到这一点吗


编辑:我对“为什么”不感兴趣,因为它不能这样工作。我只是想找个办法。谢谢。

如果使用显式接口实现,则需要通过该接口访问该方法

所以不,除了你在课文中提出的建议,没有别的办法

但在这种情况下,您通常不会对通用接口使用显式实现

编辑:如果文档警告是您担忧的根源,那么让我给您一个更好的建议:

如果您安装了它,并将其绑定到Shift+Ctrl+D(默认),那么它将尝试理解方法的名称并添加必要的文档。这不是好的部分,因为您应该总是自己编辑这部分,但是如果您从基类或接口继承方法和属性,它将自动复制文档。有时你需要编辑它,使它更具体到你的类型,但通常你可以离开它

它还将对典型模式进行特殊检测

试试看,我相信你会喜欢的。

好吧,你可以投

    IEnumerator<T> IEnumerable<T>.GetEnumerator() { return null; } // TODO
    IEnumerator IEnumerable.GetEnumerator() {
        return ((IEnumerable<T>)this).GetEnumerator();
    }
IEnumerator IEnumerable.GetEnumerator(){return null;}//TODO
IEnumerator IEnumerable.GetEnumerator(){
返回((IEnumerable)this.GetEnumerator();
}
或者,您可以对以下两种情况使用非公共实例方法:

    IEnumerator<T> IEnumerable<T>.GetEnumerator() { return GetEnumerator(); }
    IEnumerator IEnumerable.GetEnumerator() { return GetEnumerator(); }
    private IEnumerator<T> GetEnumerator() { return null; } // TODO
IEnumerator IEnumerable.GetEnumerator(){return GetEnumerator();}
IEnumerator IEnumerable.GetEnumerator(){返回GetEnumerator();}
私有IEnumerator GetEnumerator(){return null;}//TODO

不过,就我个人而言,我更喜欢看到一个公共GetEnumerator()-就像我喜欢公共Dispose()-它使消费者更容易知道它在那里。我不认为所有的接口实现都应该是公开的(远非如此),但是
foreach
使用
是非常基本的,所以一点广告也不会有什么坏处。

谢谢。我想使用显式接口实现,因为它删除了编译器对“未记录的公共方法”的警告。看来我必须复制它的文档!:Java万岁!