Невозможно получить доступ к свойствам объекта из того же класса, но другого метода в C# - PullRequest
0 голосов
/ 03 мая 2020

Я не могу получить доступ к свойствам объекта student1, который был создан в методе Main () класса Program в методе ClassOperations () того же класса. Я получаю

ошибка CS0103: имя «student1» не существует в текущем контексте

using System;

namespace Trials
{
    public class Students
    {
      public int maths;
      public int science;
      public int english;
      public int secondLang;
      public int socialScience;
      public string name;

      public Students(int[] inputMarks)
      {
        maths = inputMarks[0];
        science = inputMarks[1];
        english = inputMarks[2];
        secondLang = inputMarks[3];
        socialScience = inputMarks[4];
      }
    }

    public class Program
    {
      static void Main(string[] args)
        {
            Console.WriteLine("Enter your name: ");
            string inputName = Console.ReadLine();
            int[] marks = new int[5];

            Console.WriteLine("Enter the maths marks: ");
            marks[0] = int.Parse(Console.ReadLine());

            Console.WriteLine("Enter the Science marks: ");
            marks[1] = int.Parse(Console.ReadLine());

            Console.WriteLine("Enter the English marks: ");
            marks[2] = int.Parse(Console.ReadLine());

            Console.WriteLine("Enter the Second language marks: ");
            marks[3] = int.Parse(Console.ReadLine());

            Console.WriteLine("Enter the Social Science marks: ");
            marks[4] = int.Parse(Console.ReadLine());

            Students student1 = new Students(marks);

            student1.name = inputName;
            ClassOperations();
        }

      static void ClassOperations()
      {
          Console.WriteLine("Enter input :");
          int input = int.Parse(Console.ReadLine());

          switch (input)
          {
            case 1:
              Console.WriteLine(student1.name);
              break;
            case 2:
              Console.WriteLine(student1.maths);
              break;
            case 3:
              Console.WriteLine(student1.science);
              break;
            case 4:
              Console.WriteLine(student1.english);
              break;
            case 5:
              Console.WriteLine(student1.secondLang);
              break;
            case 6:
              Console.WriteLine(student1.socialScience);
              break;
        }
      }
    }
}

1 Ответ

0 голосов
/ 03 мая 2020

Ошибка говорит о проблеме: локальные переменные (student1), объявленные в методе (Main), не доступны в других методах (ClassOperations, текущий контекст). У вас есть несколько вариантов:

  • (stati c) свойство
  • (stati c) поле
  • параметр метода

В этом примере «лучшим» вариантом является передача вашей переменной student1 в качестве параметра методу ClassOperations:

static void Main(string[] args) {
    // setup elided
    Students student1 = new Students(marks);
    student1.name = inputName;  
    // pass as parameter    
    ClassOperations(student1);
} 

static void ClassOperations(Students student) {
    // access value via new name "student" 
    Console.WriteLine(student.name);
}

Основываясь на ваших комментариях, вот какая альтернатива с полем может выглядеть так:

static Students student; //static field 
static void Main(string[] args) {
    // setup elided
    // initialize static field 
    student = new Students(marks);
    student.name = inputName;  
    ClassOperations();
} 

static void ClassOperations() {
    // access value via static field "student" 
    Console.WriteLine(student.name);
}
...