Cześć
Przeniosłem się z C++ na C# i chcę zrobić gierkę w windows forms i chciałbym się dowiedzieć, czy mogę zrobić globalnie obiekt, np w Program.cs? czy istnieje coś takiego, jak main w c++, gdy programowałem aplikacje konsolowe. po zrobieniu obiektu w .cs nie znajduje go w formsie, chciałbym zrobić sobie obiekt player, którzy przechowuje statystyki.
Drugie pytanie, czy jest jakiś kurs, który uczy podejścia klasowego i poruszania się między plikami, formami, jakie są zakresy obiektów, zmiennych w tych formach jak szukałem po tutorialach z windows forms, to głównie znalazłem poradniki dotyczące kontrolek, list, przycisków.
Globalny obiekt, możliwe kursy
- Rejestracja: dni
- Ostatnio: dni
- Postów: 9
- Rejestracja: dni
- Ostatnio: dni
- Postów: 8
Możesz skorzystać z klasy statycznej, w której będziesz trzymał wspomniane przez Ciebie statystyki.
I skoro uczysz się od zera, to kierunek WinForms wydaje mi się dość chybiony ;)
- Rejestracja: dni
- Ostatnio: dni
- Postów: 9
Czyli mogę jedynie utworzyć zmienne globalne, ale obiekt, na którym mógłbym operować na różnych formsach już jest niemożliwy?
- Rejestracja: dni
- Ostatnio: dni
- Lokalizacja: Wrocław
Oczywiście, że możesz, np wstawiając ten obiekt do jakiegoś publicznego statycznego pola dowolnej klasy. Tylko to jest bardzo zły pomysł, który sprawi, że Twój program bardzo szybko stanie się trudną w testowaniu i debugowaniu kupą. A jak jeszcze przypadkiem dojdą Ci operacje z różnych wątków, to smród zamieni się w pot, krew i łzy.
- Rejestracja: dni
- Ostatnio: dni
- Postów: 935
Możliwy, przekazuj ten swój obiekt w konstruktorach kolejnych form.
- Rejestracja: dni
- Ostatnio: dni
- Postów: 5046
kzkzg napisał(a):
Możliwy, przekazuj ten swój obiekt w konstruktorach kolejnych form.
Do całkowicie poprawnego działania designera będzie wymagane stworzenie dodatkowo konstruktora domyślnego. Bez tego designer nie zadziała. A żeby się nie pomylić i samemu nie wywołać konstruktora domyślnego, można go oznaczyć atrybutem Obsolete:
[Obsolete("For designer use only", true)]
public MyClass()
{
InitializeComponent();
}
Mimo wszystko to bardziej poprawne rozwiązanie niż używanie singletona lub klasy statycznej. Chociaż na Twoim miejscu zacząłbym chyba małymi kroczkami, używając właśnie albo singletona albo klasy statycznej. Potem bym zrobił refaktor.