-1

好的,我确信以前出现过这样的事情,但我在上面找不到任何东西。看起来很简单,我相信答案是显而易见的。这是我的问题

我有一个名为 ICommand 的接口:

public interface ICommand
{
    void Do();
    void Undo();
}

好的,现在我的类使用了该接口:

class SquareCommand : ICommand
{
    public SquareCommand(Bitmap abitmap, Color aColor, int x, int y)
    {

    }

    public void Do()
    {
    }
    public void Undo()
    {
    }
}

}

我得到的错误是“成员名称不能与其封闭类相同”,但 SquareCommand(...) 是构造函数而不是成员。我已经寻找了明显的那些,例如将 void 放在前面(构造函数不返回任何内容),但是当我认为应该编译时,我似乎仍然无法编译它。

4

1 回答 1

0

正如其他人在评论中所说,上面的代码是可以的,所以你可能粘贴了错误的代码部分:)

为了加快速度,导致此类错误的构造函数最常见的问题之一是当您不小心将构造函数错误键入为方法,即:

public class Foo
{
    public Foo(int x) { .... }
    public void Foo(int x, int y) { .... }
}

请注意,第二个“构造函数”指定了返回类型:void。它对构造函数无效,因此编译器将其作为普通方法威胁,然后该方法的名称与 typename/constructorname 冲突,因此引发此类错误。

请务必仔细检查所有构造函数。如果任何指定了返回类型,请将其删除。

另一件事是当您在类之间复制/粘贴代码时,或者当您重命名一个类并且没有注意到有这样一个名称的方法时,即:

public class Foo
{
    public void Bar(int x) { ... }
}

如果你强制将“Foo”重命名为“Bar”,那么你会得到错误,因为生成的代码

public class Bar
{
    public void Bar(int x) { ... }
}

由于与上述相同的问题而完全无效。您必须决定:无论是类 XOR,方法都可以具有这样的名称。重命名类,或将方法重命名为其他名称。

于 2013-09-21T09:23:13.593 回答