• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Problem z obiektami w tabelii

Object Storage Arubacloud
0 głosów
303 wizyt
pytanie zadane 18 maja 2019 w C# przez Lil Keyboard Użytkownik (560 p.)
zmienione kategorie 18 maja 2019 przez Lil Keyboard

Czesc, powie mi ktos moze czemu wszystkie obiekty typu Prostokat maja u mnie wartosc tyle ile ostatni z nich czyli dlugosc - 1, szerokosc - 3 ?

using System;

namespace xyz
{
    // Napisz program, który tworzy klasę Prostokat, zawierającą dwie prywatne dane
    // składowe: dlugosc, szerokosc, dwie prywatne metody: powierzchnia(), obwod() oraz metodę
    // publiczną – Prezentuj() (która wyświetla powierzchnię i obwód prostokąta) i konstruktor
    // inicjalizujący.W metodzie Main() zdefiniuj obiekt i uruchom dla niego metodę Prezentuj(). 

    // Uzupełnij program z poprzedniego zadania o definicje tablicy obiektów dla
    // prostokątów. W metodzie Main() wyświetl powierzchnie oraz obwód wszystkich prostokątów
    // w tablicy używając (wewnątrz pętli foreach) metody publicznej Prezentuj().

    class Program
    {
        static void Main()
        {
            Prostokat[] tab = new Prostokat[3];
            tab[0] = new Prostokat(1, 2);
            tab[1] = new Prostokat(3, 4);
            tab[2] = new Prostokat(1, 3);
            //Prostokat[] tab = { new Prostokat(1, 2), new Prostokat(3, 4), new Prostokat(1, 1) };

            foreach (Prostokat t in tab)
            {
                t.Prezentuj();
            }
            // Prostokat p1 = new Prostokat(2, 3); 
            // p1.Prezentuj();
            // Prostokat p2 = new Prostokat(1, 1);
            // p2.Prezentuj();
            // Prostokat p3 = new Prostokat(2, 2);
            // p3.Prezentuj();
        }

    }
    public class Prostokat
    {
        static private int Dlugosc { get; set; }
        static private int Szerokosc { get; set; }

        public Prostokat(int _d, int _s)
        {
            Dlugosc = _d;
            Szerokosc = _s;
        }

        private static int Powierzchnia()
        {
            return Dlugosc * Szerokosc;
        }

        private static int Obwod()
        {
            return 2 * Dlugosc + 2 * Szerokosc;
        }

        public void Prezentuj()
        {
            System.Console.WriteLine("Pole prostokata wynosi: {0}, a jego Obwod: {1}", Powierzchnia(), Obwod());
            //Wyswietl powierzchnie i obwod prostokata
        }

    }
}

 

1 odpowiedź

0 głosów
odpowiedź 18 maja 2019 przez zanstaszek9 Obywatel (1,930 p.)
wybrane 18 maja 2019 przez Lil Keyboard
 
Najlepsza

Usunąłem wszystkie słówka static w klasie Prostokąt (od linii 42 do 65) i kod pokazał trzy różne wyniki, więc chyba działa tak jak zamierzałeś.

W uproszczeniu, w C++ static powoduje że dane wartości są wspólne dla wszystkich obiektów danej klasy, można za pomocą nich dodać licznik śledzący ile jest wszystkich obiektów danej klasy albo zrobić uproszczony system liczby porządkowej.

Doczytaj i przetestuj co dokładnie static robi w C# ponieważ prawdopodobnie ma ono więcej zastosować, chociażby w Javie pozwala na tworzenie odpowiedników funkcji wirtualnych z C++.

komentarz 18 maja 2019 przez Lil Keyboard Użytkownik (560 p.)
Dziekuje za odpowiedz, faktycznie musze doczytac na temat tego static
2
komentarz 19 maja 2019 przez aeragram Obywatel (1,760 p.)

Cześć,

Dorzucę kilka słów na temat static. 

Oznaczenie pola klasy jako static oznacza, że to jest pole klasy, a nie tworzonych obiektów tej klasy. Pola static istnieją bez obiektów i można o nich myśleć trochę jak o zmiennych globalnych. Dostęp do pola statycznego klasy mamy podając nazwę klasy (kropka) pole statyczne np. Klasa.poleStatyczneKlasy.

Poza polami statycznymi można tworzyć metody statyczne, które tak samo są metodami klasy, czyli nie są związane z konkretnymi instancjami klasy. Dostęp do takich metod jest taki sam jak poprzednio Klasa.MetodaKlasy().

Słowa kluczowego static można też użyć, żeby całą klasę określić jako statyczną. Oznacza to, że taka klasa zawiera wyłącznie elementy statyczne i nie można tworzyć obiektów tej klasy. Klasą statyczną jest np. klasa Math, która zawiera funkcje matematyczne wywoływane właśnie poprzez klasę np.Math.Sin(0) lub Math.Round(2.7).

Pozdrawiam aeragram

komentarz 19 maja 2019 przez Lil Keyboard Użytkownik (560 p.)
edycja 19 maja 2019 przez Lil Keyboard

@aeragram, Rowniez dziekuje za odpowiedz, bo bardzo pomocna bo wlasnie nie wiedzialem juz sam kiedy uzywac static a kiedy nie

Podobne pytania

+1 głos
1 odpowiedź 266 wizyt
pytanie zadane 9 maja 2021 w JavaScript przez molik Użytkownik (950 p.)
0 głosów
1 odpowiedź 239 wizyt
0 głosów
1 odpowiedź 79 wizyt

92,576 zapytań

141,426 odpowiedzi

319,652 komentarzy

61,961 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...