Имена членов не могут быть такими же, как и их закрывающий тип С#
Код ниже приведен в С#, и я использую Visual Studio 2010.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
namespace FrontEnd
{
class Flow
{
long i;
private int x,y;
public int X
{
get;set;
}
public int Y
{
get;set;
}
private void Flow()
{
X = x;
Y = y;
}
public void NaturalNumbers(int x, int y)
{
for (i = 0; i < 9999; i++)
{
Console.WriteLine(i);
}
MessageBox.Show("done");
}
}
}
Когда я компилирую вышеуказанный код, я получаю эту ошибку:
Ошибка: "Поток": имена участников не могут быть такими же, как и их закрывающий тип
Почему? Как я могу это решить?
Ответы
Ответ 1
Имена методов, которые совпадают с именем класса, называются конструкторами. Конструкторы не имеют возвращаемого типа. Так правильно, как:
private Flow()
{
X = x;
Y = y;
}
Или переименуйте функцию как:
private void DoFlow()
{
X = x;
Y = y;
}
Хотя весь код не имеет никакого смысла для меня.
Ответ 2
Проблема заключается в методе:
private void Flow()
{
X = x;
Y = y;
}
Ваш класс имеет имя Flow
, поэтому этот метод нельзя также назвать Flow
. Вам нужно будет изменить имя метода Flow
на что-то еще, чтобы скомпилировать этот код.
Или вы хотели создать частный конструктор для инициализации своего класса? В этом случае вам придется удалить ключевое слово void
, чтобы компилятор знал, что вы объявляете конструктор.
Ответ 3
Конструкторы не возвращают тип, просто удалите возвращаемый тип, который недействителен в вашем случае. Тогда это будет нормально.
Ответ 4
просто удалите это, потому что у конструктора нет возвращаемого типа, такого как void
это будет следующим:
private Flow()
{
X = x;
Y = y;
}
Ответ 5
Конструктор не должен иметь тип возврата.
удалите void перед каждым конструктором.
Некоторая очень основная характеристика конструктора:
а. То же имя, что и класс
б. нет возврат type.
с. будет вызываться каждый раз, когда объект создается с классом. например, в вашей программе, если вы создали два объекта Flow,
Flow flow1 = new Flow();
Flow flow2 = new Flow();
то конструктор потока будет вызван в 2 раза.
д. Если вы хотите вызвать конструктор только один раз, то объявите это как статический (статический конструктор) и не забудьте удалить любой модификатор доступа из статического конструктора..
Ответ 6
Поскольку конструктор должен быть в начале класса, вы столкнулись с вышеупомянутой проблемой. Таким образом, вы можете либо изменить имя, либо если вы хотите использовать его в качестве конструктора, просто скопируйте метод в начале класса.
Ответ 7
Какая польза от X и Y в этом классе?