Właściwości get, set i klasa statyczna

0

Piszę sobie klasę Settings. Będzie ona zawierać sporą liczbe ustawień domyślnych programu, ktore będą mogły być zmieniane przez usera oraz odczytywane z pliku.
Tu pojawiają się dwa pytania/problemy :

  1. czy klasa powinna być statyczna a wszystkie pola publiczne, dla łatwego dostępu
  2. czy zrobić pola prywatne i właściwości Get, Set. Zwykle ich używam ale ostatnio zaczęło mnie zastanawiać czy słusznie, po przeczytaniu artykułu jakiegoś programisty. Dodam, że nie chcę używać jakiś eventów że wartość pola się zmieniła (wtedy jest sens settera) tylko po prostu korzystać z pól.
  3. chcę by ustawienia były dodatkowo zapisywane w pliku - powiedzmy w momencie wyjścia z programu. a w momencie włączenia odczytywane. Jaka jest najprostsza metoda zapisania i odczytania, żeby nie trzeba było bawić się w setki if'ów, parsowania itd?
0
  1. zależy, jeśli nie interesuje Cię poprawność wprowadzonych danych (lub wszystkie możliwe wartości są poprawne) to pole publiczne wystarczy.
  2. http://http://www.google.pl/search?q=C%23+ini
0
ubuntuser napisał(a)

czy zrobić pola prywatne i właściwości Get, Set. Zwykle ich używam ale ostatnio zaczęło mnie zastanawiać czy słusznie, po przeczytaniu artykułu jakiegoś programisty. Dodam, że nie chcę używać jakiś eventów że wartość pola się zmieniła (wtedy jest sens settera) tylko po prostu korzystać z pól.

Nie musisz robić pola prywatnego, żeby mieć właściwość. Wystarczy to:

public double Pole { get; set; }

Nie ma też powodu, żeby klasa była statyczna, już lepiej użyć singletona.

A tak w ogóle, to czemu nie chcesz użyć wbudowanego mechanizmu ustawień?

1

Nie ma też powodu, żeby klasa była statyczna, już lepiej użyć singletona.
Singleton to brzydki hack. Albo coś jest bezstanowe, zatem powinno być statyczne, albo przechowuje stan, a wtedy rzadko jest rzeczywista potrzeba ograniczania do pojedynczej instancji.

0
somekind napisał(a)

A tak w ogóle, to czemu nie chcesz użyć wbudowanego mechanizmu ustawień?

Można prosić jakieś wskazówki?
Ogólnie to obojętnie mi jak będą składowane ustawienia. Na dobrą sprawę mogę je dać do rejestru.
Tylko chciałbym je potem wygodnie odczytać.

0

Jeszcze jedno.
Zdałem sobie sprawę, że będę jednak potrzebował kilku instancji ustawień. Czy wrócić do klasy, i bawić się w zapisywanie w pliku .ini?
Dokładniej powiem tak, to może łatwiej będzie wam doradzić: tworzę klienta IRC i chcę aby dla każdego kanału były inne ustawienia. Nie będzie ograniczeń co do ilości kanałów. Zdałem sobie sprawę z tego dopiero teraz, bo piszę, rzecz jasna, hobbystycznie ;)
Czy w ogóle da się zapisywać całe obiekty do pliku? Stworzyłbym sobie wtedy obiekty klasy serwer, a w niej listę obiektów kanał, i było by bezproblemowo... Bo powinienem jeszcze dać możliwość wielu serwerów.

0

Serializacja. Jest tylko z nią pewien problem - jeśli zmienisz klasę, to odczyt zserializowanych danych ze starej klasy może być niemożliwy. Musiałbyś więc np przetrzymywać w projekcie kilka wersji (tzn zależy jak często byś tą klasę zmieniał) klasy z ustawieniami i mieć w nich metodę konwertującą do najnowszej wersji.

0
ubuntuser napisał(a)

Czy w ogóle da się zapisywać całe obiekty do pliku? Stworzyłbym sobie wtedy obiekty klasy serwer, a w niej listę obiektów kanał, i było by bezproblemowo... Bo powinienem jeszcze dać możliwość wielu serwerów.

Oczywiście, że się da. Nazywa się to serializacja i można w ten sposób w trzech linijkach kodu zapisać obiekt do pliku np. XML, a nie bawić się w jakieś prehistoryczne ini.

0

Mam jeszcze takie pytanie. Używam ustawień wbudowanych w projekt. W Properties.Settings mam Default. Czy mogę dodać jeszcze inny obiekt ustawień? Jedne powiedzmy domyślne, drugie użytkownika.
Żeby nie tworzyć dwóch plików .settings.
Drugie pytanie, czy da się dodać ustawienia (do powiedzmy ustawień użytkownika) z poziomu kodu aplikacji? Bo w Settings.Default nie widzę opcji typu Add.

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