C#: Почему на функцию приходит пустое значение переменной? Здравствуйте, начинаю иззучать ООП и сам язык C#, и поэтому ошибка, скорее всего, будет глупой, и могу не совсем правильно выражаться. Есть класс Container, который выполняет ряд функций в зависимости от выбора пользователя, но данные переменных он берет с класса Data. Ошибка следующая: при выполнении функции Adding в классе Container переменная Description (class Data) приходит пустой: т.е. значение ей присвается в самом начале выполнения программы, но дальше почему-то она пустая при выполнении функции Adding. На другой функции Main переменная приходит заполненная и корректно отображает свое содержимое. В чем проблема? Спасибо.using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace CsharpLABA2 { class Data { public string Description; public int Num; public void Filling() { Console.OutputEncoding = Encoding.UTF8; Console.WriteLine("Введите описание: "); Description = Console.ReadLine(); } public void Output() { Console.WriteLine("Ваш текст: " + Description); } public void Input() { Console.WriteLine("Для добавления строки введите 1 "); Console.WriteLine("Для удаления строки введите 2 "); Console.WriteLine("Для очистки текста введите 3 "); Console.WriteLine("Для определения колличества символов введите 4 "); Console.WriteLine("Для поиска заданного текста который возвращает колличество совпадений введите 5 "); Console.WriteLine("Для замены одного символа на остальные введите 6 "); Num = Convert.ToInt32(Console.ReadLine()); } } class Container { public void Adding () { Data Dataclass = new Data(); Console.WriteLine(Dataclass.Description); Console.WriteLine("Введите строку, которую вы хотите добавить "); Console.WriteLine("Было: " + Dataclass.Description); Dataclass.Description = String.Concat(Dataclass.Description, Console.ReadLine()); Console.WriteLine("Результат: " + Dataclass.Description); Console.ReadKey(); } static void Main(string[] args) { Container Classcontainer = new Container(); Data Dataclass = new Data(); Dataclass.Filling(); Dataclass.Output(); Dataclass.Input(); switch (Dataclass.Num) { case 1: Classcontainer.Adding(); Dataclass.Output(); Dataclass.Input(); break; case 2: break; case 3: break; case 4: break; case 5: break; case 6: break; } } } }
Проблема заключается в том, что при вызове метода Adding() в классе Container каждый раз создается новый экземпляр класса Data, и поэтому переменная Description в этом новом экземпляре будет пустой (у него не будет значения, которое вы ввели в методе Filling()).
Для решения этой проблемы вам нужно передавать уже заполненный экземпляр Data в метод Adding(). Например, вы можете изменить метод Adding() следующим образом:
public void Adding(Data data) { Console.WriteLine(data.Description); Console.WriteLine("Введите строку, которую вы хотите добавить "); Console.WriteLine("Было: " + data.Description); data.Description = String.Concat(data.Description, Console.ReadLine()); Console.WriteLine("Результат: " + data.Description); Console.ReadKey(); }
И вызывать этот метод в Main() следующим образом:
case 1: Classcontainer.Adding(Dataclass); Dataclass.Output(); Dataclass.Input(); break;
Таким образом, переменная Description будет передаваться между методами и сохранять свое значение.
Проблема заключается в том, что при вызове метода Adding() в классе Container каждый раз создается новый экземпляр класса Data, и поэтому переменная Description в этом новом экземпляре будет пустой (у него не будет значения, которое вы ввели в методе Filling()).
Для решения этой проблемы вам нужно передавать уже заполненный экземпляр Data в метод Adding(). Например, вы можете изменить метод Adding() следующим образом:
public void Adding(Data data){
Console.WriteLine(data.Description);
Console.WriteLine("Введите строку, которую вы хотите добавить ");
Console.WriteLine("Было: " + data.Description);
data.Description = String.Concat(data.Description, Console.ReadLine());
Console.WriteLine("Результат: " + data.Description);
Console.ReadKey();
}
И вызывать этот метод в Main() следующим образом:
case 1:Classcontainer.Adding(Dataclass);
Dataclass.Output();
Dataclass.Input();
break;
Таким образом, переменная Description будет передаваться между методами и сохранять свое значение.