Nauka C# - właściwości

0

Witam

Niedawno rozpocząłem naukę C#. Jestem na etapie zrozumienia właściwości.
W większości kursów, które przeczytałem właściwości są opisane jako sposób na dostęp do prywatnych zmiennych w ramach danej klasy i kontrolę wprowadzanych wartości.
I przykładowo postawiłem przed sobą zadanie do zrealizowania.
Zadanie polega na tym, że:

  1. Wprowadzam wartość z klawiatury.
  2. Przypisuję do zmiennej w stworzonej klasie poprzez odwołanie się do właściwości.
  3. Jeśli wprowadzona wartość jest liczbą to przypisuję ją do zmiennej prywatnej w klasie i następnie wykonuję kolejną metodę, która wykonuje proste dodawanie.
  4. Jeśli wprowadzona wartość nie jest liczbą to wyświetlam komunikat proszący o ponowne wprowadzenie wartości. Tutaj program powinien wrócić do punktu 1 i wykonać całą sekwencję zdarzeń od początku. Mam jednak z tym problem.
    Spójrzcie proszę na poniższy kod i dajcie wskazówki jak to można poprawnie wykonać.
class nauka
    {
        private string _a;
        private string val;
        private int val2;
        private bool is_int;
        public string A
        {
            get { return _a; }

            set
            {

                if ((is_int = Int32.TryParse(value, out val2)))
                { _a = value;}
                else
                {
                    Console.WriteLine("Wprowadź ponownie poprawną wartość:");
                    nauka wprowadza = new nauka();
                    wprowadza.A = Console.ReadLine();

                }
              

            }

        }
        public int dodawnie()
        {return Int32.Parse(_a) + Int32.Parse(_a);}

    }
class Program
    {
        static void Main(string[] args)
        {
            nauka dodawanie = new nauka();
            string val = Console.ReadLine();
            dodawanie.A = val;
            Console.WriteLine("Wynik dodawania:" + dodawanie.dodawnie());
            Console.ReadKey();
        }
    }
1

Jeżeli koniecznie chcesz to zrobić w ten sposób to tak:

 
class nauka
    {

        private string _a;
        public string A
        {
            get { return _a; }

            set
            {
                int val; //ta zmienna wystarczy jak zostanie stworzona tutaj, ponieważ nie jest potrzebna w żadnym innym miejscu klasy
                if (Int32.TryParse(value, out val)) //nie musisz przypisywać wartości zwracanej przez TryParse do zmiennej
                { _a = value; }
                else
                {
                    Console.WriteLine("Wprowadź ponownie poprawną wartość:"); 
                    //niepotrzebnie tworzyłeś tu nowy obiekt klasy nauka i to tworzyło problem
                    A = Console.ReadLine();
                }


            }

        }
        public int dodawnie()
        { return Int32.Parse(_a) + Int32.Parse(_a); }

    }


    class Program
    {
        static void Main(string[] args)
        {
            nauka dodawanie = new nauka();
            dodawanie.A = Console.ReadLine();
            Console.WriteLine("Wynik dodawania:" + dodawanie.dodawnie());
            Console.ReadKey();
        }
    }

Miej jednak świadomość, że ogólnie jest to kiepskie rozwiązanie podanego zadania. Ale jeżeli chodzi tylko o pobawienie się właściwościami to ok.

2

Tak się nie robi. Właściwości służą do operowania na wartościach jakiegoś pola, nie do pobierania danych od użytkownika, wyświetlania komunikatów w konsoli, ani generowania innych czasochłonnych efektów ubocznych.

1 użytkowników online, w tym zalogowanych: 0, gości: 1