【发布时间】:2012-09-12 08:53:40
【问题描述】:
上周我多次遇到此问题,很想知道原因 - 我有一个谷歌,但找不到任何直接相关的内容。
我有一个带有动态方法的类,我可以添加一个具有相同接口的静态方法:
public class MyClass
{
public int MyMethod()
{
//do something #1;
}
public static int MyMethod()
{
//do something
}
}
这很好,但是如果我尝试从动态方法调用静态方法,将 #1 替换为 return MyClass.MyMethod(),我会收到错误“以下方法或属性之间的调用不明确:MyClass.MyMethod()和 MyClass.MyMethod()。
如果删除静态方法,则错误变为“需要对象引用..”,这是有道理的。
那么为什么这会模棱两可呢?它以类名开头以指定静态方法,该方法适用于代码中的任何其他位置。
为什么不在这里?
编辑:我实际上并没有尝试在没有调用静态方法的动态方法的情况下编译它,我只是通过 VS 没有下划线。
但我想仍然是一个类似的问题,但添加了“为什么不能两者都有,因为一个是静态的,一个不是”
【问题讨论】:
-
给定的代码是为你编译的吗?它为我抛出错误 CS0111(已经定义了一个名为 'MyMethod' 的成员具有相同的参数类型)。
-
这是一个奇怪(不正确)的错误消息,但可能只是因为编译器尝试解析和验证引用的顺序。
-
@prashanth 你是对的。我做了一个假设 - 请参阅编辑。
-
顺便说一句,他们不称这些“动态”方法。 :)
标签: c# overloading