@GeoDpto

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;
            }
        }
    }
}
  • Вопрос задан
  • 215 просмотров
Решения вопроса 1
@dthpth
Погромист
вы в обоих методах вызываете конструктор класса Data, однако заполнение поля Description происходит только в одном из методов (при вызове Dataclass.Filling())

скорее всего, вам нужно параметризовать метод Classcontainer.Adding() и в него параметром передавать ссылку на ранее созданный экземпляр Data Dataclass
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
GavriKos
@GavriKos
В начале main вы заполнили один экземпляр Data, потом в функции Adding создали другой, который уже не заполнен естественно, и из него берете данные. Два разных экземпляра у вас.
Ответ написан
Комментировать
В методе Adding( ) создается новый объект Dataclass, поле которого Description пустое. Вам проще объявить объект Dataclass (название не очень удачное) в namespace.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы