#c#
#c#
Вопрос:
Я пытаюсь изучить ООП, создав небольшую программу, которая считывает список людей и выводит только тех, кто старше 30 лет, используя два класса Person и PollParticipant . Я создаю экземпляр нового person из своего класса person и добавляю name и age:
, которые определены в конструкторе, но когда я это делаю, это выдает мне ошибку, которая
Person person = new Person(name,age); the name 'name' does not exist in the current context
. Для моих полей установлено значение public, поэтому он должен иметь к ним доступ, что я делаю не так?
Вот мой класс Person:
namespace Poll_Opinion
{
public class Person
{
public string name;
public int age;
public Person(string name, int age)
{
this.name = Name;
this.age = Age;
}
public string Name
{
get
{
return this.name;
}
set
{
this.name = value;
}
}
public int Age
{
get
{
return this.age;
}
set
{
this.age = value;
}
}
}
}
Мой класс участников опроса:
namespace Poll_Opinion
{
class PollParticipant
{
public List<Person> pollParticipant;
public PollParticipant()
{
this.pollParticipant = new List<Person>();
}
public void AddMember(Person participant)
{
this.pollParticipant.Add(participant);
}
public Person ShowOlderMembers()
{
return this.pollParticipant.OrderByDescending(p => p.age).First();
}
}
}
И мой Program.cs, где я создаю экземпляр:
namespace Poll_Opinion
{
class Program
{
static void Main(string[] args)
{
PollParticipant pollparticipant = new PollParticipant();
int n = int.Parse(Console.ReadLine());
for (int i = 0; i < n; i )
{
string[] input = Console.ReadLine().Split();
int age = int.Parse(input[i]);
Person person = new Person(name,age);
pollparticipant.AddMember(person);
}
}
}
}
Комментарии:
1. Ну, когда вы находитесь
Person person = new Person(name,age);
, откуда вы ожидаете, чтоname
это произойдет? Я думаю, что существует недопонимание того, как работают свойства / поля.2. Вам нужно понимать разницу между членами класса и параметрами
3. Кроме того, ваш конструктор класса использует неправильное значение для присваивания. Вы хотите назначить параметр, а не существующее свойство
4. @Broots Waymb Оно исходит из полей, которые я определил в классе?
5. @MurrayJohnson — Нет, это не так. Это не то, как работают поля / свойства и конструкторы.
Ответ №1:
У вас есть две проблемы. Первый находится здесь:
Person person = new Person(name,age);
Вы пытаетесь передать name
и age
Person
конструктору, но вы не создали их экземпляр.
Вторая проблема заключается в вашем конструкторе:
public Person(string name, int age)
{
// this.name = Name;
this.name = name;
// this.age = Age;
this.age = age;
}
Вам нужно назначить name
параметр this.name
полю, а не Name
свойству. В вашем случае вы присваиваете this.name
this.name
:
this.name = Name; // => where 'Name' get method return this.name
public string Name
{
get
{
return this.name;
}
set
{
this.name = value;
}
}
Кстати, в этом случае вам не нужно общедоступное поле name
(которое должно быть закрытым). Просто сделайте:
public string Name { get; set; }
В C # свойства практически уже имеют скрытое личное поле.
Комментарии:
1. Возможно, стоит указать, что этот класс будет создан с помощью чего-то вроде
Person person = new Person("Bob", age);
или чего-то еще. OP, похоже, не понимает, как работают поля / свойства в отношении создания новых объектов.
Ответ №2:
name
не определено в вашей функции Main() при создании объектов Person.