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;
}
}
}
}

21 Авг 2019 в 06:59
211 +1
0
Ответы
1

Проблема заключается в том, что при вызове метода 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 будет передаваться между методами и сохранять свое значение.

20 Апр в 13:10
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 92 548 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир