создание экземпляра класса означает, что имя не существует

#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.