C#中的接口和构造函数

时间:2013-09-21 09:06:32

标签: c# interface compiler-errors

好的,我确信之前有过这样的事情,但我找不到任何东西。看似简单,我确信答案是显而易见的。这是我的问题

我有一个名为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放在前面(构造函数不会返回任何东西)但是我认为它应该仍然无法编译。

1 个答案:

答案 0 :(得分:0)

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

为了加快速度,导致此类错误的 contructors 最常见的问题之一是当您意外地将构造函数错误地键入方法时,即:< / p>

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

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

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

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

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

如果您强制将“Foo”重命名为“Bar”,那么您将从生成的代码中获得错误

public class Bar
{
    public void Bar(int x) { ... }
}
由于与上述相同的问题,

完全无效。你必须决定:要么类XOR,方法可以有这样的名字。重命名该类,或将该方法重命名为其他名称。