我有一个问题其实不是什么问题,而是一些让我有点好奇的问题。
我有一个包含两个方法的类。一个是静态方法,另一个是实例方法。方法具有相同的名称。

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.
    }
}

当我试图构建我的项目时,我会错误地说:
调用之间不明确
以下方法或属性:
'myapp.blockheader.peek(system.io.binaryreader)'

'myapp.blockheader.peek(system.io.binaryreader)'
我知道方法签名实际上是相同的,但是我不知道如何可以直接从实例成员调用静态方法。
我想这有一个很好的理由,但是有人知道这个理由是什么吗?

最佳答案

C设计的一般原则是强制您指定任何可能存在歧义的地方。面对重构工具,不管事情是静态的还是非静态的,这种姿态都是很好的,特别是在这种情况下。您将看到许多其他类似的情况(override vs virtual、new for shadowing等)。
一般来说,消除这种混乱的空间将使代码更清晰,并迫使您保持您的房子秩序。
编辑:A good post from Eric Lippert discusses another reason for this ambiguity leading to the error you saw

08-27 00:53