Zmienne statyczne

Odpowiedz Nowy wątek
2015-01-08 09:37
Pijany Mleczarz
0

W jednej z klas wykorzystuje dwie zmienne statyczne. Do każdej z nich przy deklaracji przypisana jest funkcja, która pobiera wartość typu prostego z bazy danych. Rozumiem to tak, że odwołując się do zmiennej statycznej, wykonywana jest funkcja przypisująca jej wartość, a sama zmienna zachowuje tą wartość przez okres działania programu.

Rozważam teraz jeden problem, mianowicie co w przypadku jeżeli dane zmieniły się w bazie danych, zmienna statyczna zostanie "aktualizowana"? Jeżeli tak to skąd "zmienna wie", że wymagana jest aktualizacja.

Z góry dziękuję za odpowiedź.

Pozostało 580 znaków

2015-01-08 10:02
0

Zmienna chyba nie wie że nastąpiła zmiana. Jedyna szansa to przekazanie do aplikacji zdarzenia "nastąpiła zmiana danych" i w obsłudze zdarzenia aktualizacja zmiennej. Nie napisałeś jaka to baza ale chyba tak dobrze to tylko w erze mają. Można cyklicznie odpytywać bazę czy nie nastąpiła zmiana ale to już chyba nie jest programowanie sterowane zdarzeniami.

edytowany 1x, ostatnio: perlon, 2015-01-08 10:03

Pozostało 580 znaków

2015-01-08 10:09
Pijany Mleczarz
0

Z tego co doczytałem, zmienna statyczna inicjowana jest podczas odpalenia programu. Nie tak jak pisałem, dynamiczne podczas wywołania. Czy można więc powiedzieć, że wartość tej zmiennej nie ulegnie zmianie, nawet jeżeli taka zmiana nastąpić powinna?

Pozostało 580 znaków

2015-01-08 10:21
0

Nie. Zmienna statyczna to taka która zachowuje wartość między kolejnymi wywołaniami funkcji/procedury/metody. W przypadku c# zmienna statyczna zadeklarowana w klasie jest współdzielona przez wszystkie instancje tej klasy.

edytowany 1x, ostatnio: perlon, 2015-01-08 10:21

Pozostało 580 znaków

2015-01-08 10:35
Pijany Mleczarz
0

Źle zadałem pytanie, bo nie do końca wiem co teraz znaczy Twoje "nie". Załóżmy, że zmienna statyczna zawiera identyfikator ostatniego elementy pobranego z tabeli produktów. Identyfikator ten jest wykorzystywany w wielu miejscach. Podczas działania programu, ktoś dodaje nowy produkt, więc identyfikator przechowywany w zmiennej statycznej jest nieaktualny. Czy w tym przypadku zmienna statyczna zostanie aktualizowana czy będzie przechowywać cały czas stary identyfikator?

Pozostało 580 znaków

2015-01-08 10:38
0

Pokaż przykładowy kod jak to wygląda bo coś mącisz.

Pozostało 580 znaków

2015-01-08 10:49
gsfdgxb
0

nic magicznie nie zostanie zaktualizowane - jeśli chcesz mieć coś zaktualizowane to musisz to zaktualizować

zmienna statyczna to normalna zmienna tylko jest współdzielona przez wszystkie instancje klasy

Pozostało 580 znaków

2015-01-08 10:59
0

Z punktu widzenia filozofii są dwa jakby sposoby. Albo baza powie że LastID się zmienił i trzeba to obsłużyć. Nie znam sposobu żeby tak było. Albo program przed użyciem LastID odpyta bazę czy przypadkiem się nie zmienił, jeżeli tak to powinien użyć zaktualizowanego.

edytowany 1x, ostatnio: perlon, 2015-01-08 11:00

Pozostało 580 znaków

2015-01-08 11:02
Pijany Mleczarz
0

@dam1an to większy projekt, miałbym trudności, żeby to dobrze wyeksponować.

@gsfdgxb czyli samo odwołanie się do zmiennej statycznej nie wymusza jej ponownej inicjacji?

@perlon przykład z ostatnim produktem jest poglądowy i abstrakcyjny. Ma na celu zilustrowanie problemu.

Na abstrakcyjny przykład masz abstrakcyjną odpowiedź ;-) - perlon 2015-01-08 11:04

Pozostało 580 znaków

2015-01-08 11:21
0
Pijany Mleczarz napisał(a):

Z tego co doczytałem, zmienna statyczna inicjowana jest podczas odpalenia programu.

Gdzie to przeczytałeś?
Po pierwsze nie ma czegoś takiego jak zmienna statyczna. Statyczne mogą być klasy, pola, metody, właściwości, zdarzenia, operatory i konstruktory.
Po drugie inicjację można mieć w gimnazjum, ale nie podczas odpalenia programu.
Po trzecie, inicjalizacja (o którą zapewne Ci chodziło) statycznych elementów nie odbywa się podczas uruchomienia programu.

Czy można więc powiedzieć, że wartość tej zmiennej nie ulegnie zmianie, nawet jeżeli taka zmiana nastąpić powinna?

Zmienne ani pola same z siebie wartości nie zmieniają.


"HUMAN BEINGS MAKE LIFE SO INTERESTING. DO YOU KNOW, THAT IN A UNIVERSE SO FULL OF WONDERS, THEY HAVE MANAGED TO INVENT BOREDOM."

Pozostało 580 znaków

2015-01-08 12:53
Pijany Mleczarz
0

@somekind na Twoją odpowiedź czekałem :)

Mocno, ale rzeczowo. Powiedz mi w takim razie kiedy takie pole statyczne jest inicjalizowane?

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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