2013-09-21 3 views
-1

Хорошо, я уверен, что что-то подобное появилось раньше, но я ничего не могу найти на нем. Кажется простым и уверен, что ответ очевиден. вот моя проблемаИнтерфейсы и конструкторы в C#

У меня есть интерфейс под названием ICommand:

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

Ok так что теперь у меня есть класс, который использует интерфейс:

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

    } 

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

} 

Ошибки я получаю «имена элементов не может быть тем же самым, что и их окружающий класс », но SquareCommand (...) является конструктором, не являющимся членом. Я искал очевидные, например. помещая void впереди (конструкторы ничего не возвращают), но я все еще не могу заставить это скомпилировать, когда я думаю, что это должно произойти.

+5

Показанный код верный. Здесь должно быть что-то не показано здесь интерферирующим – Ralf

+0

- это полный код? если нет, укажите полный. Это компилируется идеально. – Zeeshan

+0

Какие поля находятся в SquareCommand? В какой строке говорится, что ошибка указана на – Sayse

ответ

0

Как другие сказали в комментариях, приведенный выше код в порядке, так что вы probalby вставили неправильно часть кода :)

Чтобы ускорить вещи, один из наиболее распространенных вопроса с contructors, что в результате таких ошибка, когда вы случайно неправильно конструктор типа как метод, а именно:

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

Обратите внимание, что второй «конструктор» имеет тип возвращаемого значения указанного: недействительным. Это недопустимо для конструктора, поэтому компилятор вместо него вместо этого запускает его как обычный метод, а затем имя этого метода сталкивается с typename/constructorname и, следовательно, возникает такая ошибка.

Обязательно тщательно проверяйте ВСЕ конструкторы. Если у какого-либо есть возвращаемый тип, удалите его.

Другое дело, когда вы копируете/код вставки между классами, или при переименовании класса и не заметить, что существует метод такого имени, то есть:

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

Если принудительно переименовать «Foo "в„Bar“, то вы получите сообщение об ошибке, так как в результате код

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

недопустим точно в силу тех же проблем, как уже упоминалось выше. Вам придется решить: любой класс XOR может иметь такое имя. Переименуйте класс или переименуйте метод в другое имя.

+0

Хорошо, думаю, что у меня это отсортировано сейчас. Спасибо за помощь. Проблема, как кто-то сказал, не был с этим кодом, но с перечислением, которое у меня было с именем Color (следовательно, с ошибкой), очевидно, что его нельзя назвать так же, как aC# type, мне придется изменить имя этого на что-то остальное. Теперь он компилируется. Благодаря тому, кто указал, я пропустил публику до определения класса, но не ошибся, так как его явно означает публичный класс, а не внутренний (который, по моему мнению, является отсутствием публичного или частного права по умолчанию). Еще раз спасибо. – user2801678

Смежные вопросы