Pat*_*son 9 .net c# ambiguous-call
我有一个问题,这不是一个真正的问题,但是让我有点好奇的东西.
我有一个有两种方法的课程.一个是静态方法,另一个是实例方法.方法具有相同的名称.
public class BlockHeader
{
public static BlockHeader Peek(BinaryReader reader)
{
// Create a block header and peek at it.
BlockHeader blockHeader = new BlockHeader();
blockHeader.Peek(reader);
return blockHeader;
}
public virtual void Peek(BinaryReader reader)
{
// Do magic.
}
}
Run Code Online (Sandbox Code Playgroud)
当我尝试构建我的项目时,我收到一条错误消息:
以下方法或属性之间的调用不明确:'MyApp.BlockHeader.Peek(System.IO.BinaryReader)'和'MyApp.BlockHeader.Peek(System.IO.BinaryReader)'
我知道方法签名实际上是相同的,但我看不出我怎么可能直接从实例成员调用静态方法.
我认为有一个很好的理由,但有谁知道这是什么原因?
C#设计的一般政策是强制您指定存在潜在歧义的地方.面对重构工具,允许人们在一塌糊涂的情况下重新判断事物是否是静态的,这种立场是很好的 - 特别是对于这样的情况.你会看到很多其他的情况(覆盖与虚拟,新的阴影等).
一般来说,删除此类混淆空间会使代码更清晰,并迫使您保持房屋整洁.
编辑:Eric Lippert的一篇好文章讨论了导致你看到错误的这种模糊性的另一个原因