Problem ze zrozumieniem właściwości.

0

Podczas nauki c# trafiłem na problem którego nie mogę rozgryźć(od razu mówie,że odpowiedzi nie znalazłem ani w książce ani w dokumentacji - a przynajmniej nie mogę do tego dojść).Z tego co zrozumiałem to właściwości służą do ustawiania bądź pobierania wartości pól obiektu.A więc:


{
    class Class1
    {
        public int number;   //te pola są publiczne tylko na potrzeby eksperymentu.
        public string name;

        public int Number { get; set; }
        public string Name { get; set; }

        public Class1(int num,string nam)
        {
            Number = num;
            Name = nam;
        }
    }
}

{
    class Program
    {
        static void Main(string[] args)
        {

            Class1 example = new Class1(123,"przykład");  //tutaj przekazuje do konstruktora parametry,więc oczekuje,że po pobraniu ich za pomocą właściwości        
                                                                                  //wyświetlą mi sie właśnie te wartości.

            Console.WriteLine("properties Name: " + example.Name + " Number: " + example.Number + "\n"); //niestety wyświetla mi sie znak pusty i 0.
            Console.WriteLine("fields     Name: " + example.name + " Number: " + example.number + "\n");    //a tutaj wyświetla mi się to co podałem.

            example.Name = "lol";           //próbuje ustawić wartości za pomocą properties
            example.Number = 400;

            Console.WriteLine("properties Name: " + example.Name + " Number: " + example.Number + "\n"); //wyświetla mi się to co ustawiłem
            Console.WriteLine("fields     Name: " + example.name + " Number: " + example.number + "\n");    //a tu dalej to co przekazałem przez konstruktor na początku

            Console.Read();
        }
    }
}

Czy ktoś może m i wyjaśnić dlaczego po użyciu właściwości wartości pól pozostają takie same jak te które zostały przekazane przy tworzeniu obiektu?
I dlaczego przy tworzeniu obiektu i wyświetleniu za pomocą właściwości zawierają one znak pusty i 0?
Zastanawiałem się,czy temat umieścić w newbie czy tutaj,jeżeli źle wybrałem to przepraszam.

1

Bo zamiast właściwości operujących na zdefiniowanych przez Ciebie polach, użyłeś automatycznych właściwości, które z tymi polami nie mają nic wspólnego.

2

Musisz określić, co właściwość ma zwrócić/przyjąć

class Class1
        {
            private int number;  
            private string name;

            public int Number
            {
                get
                {
                    return number;
                }
                set
                {
                    number = value;
                }
            }

            public string Name
            {
                get
                {
                    return name;
                }
                set
                {
                     name = value;
                }
            }

            public Class1(int num, string nam)
            {
                Number = num;
                Name = nam;
            }
        }
0

O! bardzo dziękuje za odpowiedź. Myślałem o tym,ale byłem przekonany ,że nie można w tym grzebać.Teraz to w sumie zachowuje się jak gettery i settery w javie.Dobrze rozumiem?

0

Coś w tym stylu ;)

Dodatkowo w VS masz udogodnienie, ustawiasz kursor w miejscu danego pola, używasz kombinacji CTRL+R+E i masz z automatu utworzoną właściwość dla tego pola :)

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