方法过载静态+动态失败

3Pi*_*3Pi 5 c# overloading

我在上周遇到过好几次,很想知道原因 - 我有一个谷歌,但找不到任何直接相关的东西.

我有一个动态方法的类,我可以添加一个具有相同接口的静态方法:

public class MyClass
{
    public int MyMethod()
    {
        //do something #1;
    }

    public static int MyMethod()
    {
        //do something
    }
}
Run Code Online (Sandbox Code Playgroud)

这很好,但如果我尝试从动态方法调用静态方法,用#替换#1 return MyClass.MyMethod(),我会收到错误"以下方法或属性之间的调用是不明确的:MyClass.MyMethod()和MyClass.MyMethod() .
如果删除静态方法,则错误更改为"需要对象引用...",这是有道理的.

那为什么这个含糊不清?它已经以类名开头,以指定静态方法,该方法可以在代码中的任何其他位置使用.
为什么不在这里?

编辑:我没有真正尝试编译它没有动态方法调用静态方法,我刚刚走了VS没有强调它.
但我认为仍然是一个类似的问题,但添加了"为什么不能同时存在,因为一个是静态的,一个不是"

hor*_*rgh 1

此外,这里有一个关于 SO 的类似问题,给出了一些解释,为什么你不能有两个具有相同签名的方法。

public class MyClass
{
    public int MyMethod()
    {
        return 0;
    }

    public static int MyMethod() //Here compiler says, that you've already got method MyMethod with same parameter list
    {
        return 0;
    }
}
Run Code Online (Sandbox Code Playgroud)

所以,你根本不能拥有这些方法

看看这个

首先:

方法的签名由方法的名称以及每个形式参数的类型和种类(值、引用或输出)组成,按从左到右的顺序考虑。具体来说,方法的签名不包括返回类型,也不包括可能为最右边的参数指定的 params 修饰符。

第二:

方法重载允许类、结构或接口声明多个具有相同名称的方法,前提是它们的签名在该类、结构或接口中是唯一的。

编辑

至于您收到该错误的原因:您可能尚未编译并看到带有红色下划线的错误。如果进行编译,您将在调用静态方法的行中而不是在定义静态方法的行中看到带有蓝色下划线的错误。