Skocz do zawartości

C# Korzystanie ze zmiennych z innej klasy.


MadMike99

Polecane posty

Witam.

Mój problem polega na tym, że nie wiem jak pobrać wartość zmiennej z klasy pierwszej do klasy drugiej zaznaczając, że ta zmienna zmienia się co jakiś czas w klasie pierwszej. Korzystałem na razie z:

Klasa 1


public static int c = DateTime.Now.Minute;

Klasa 2:


private int minuta = Form2.c;

Wydaje mi się, że z tego powodu wpisu "static" wartość zmiennej w klasie 2 jest ciągle taka sama, a musi zmieniać się wraz ze skokiem minutowym.

Link do komentarza
Udostępnij na innych stronach

Udostępnij wartość zmiennej poprzez właściwość. Np:

public int C
{
get
{
return c;
}
}

Jeśli chcesz zmieniać wartość c co minutę, użyj klasy Timer. Gotowy kawałek kodu np tu: KLIK

[edit]

Dodałem get - pamiętałem i się zgapiłem. Dzięki, webtom.

Nie proponowałem innego podejścia, bo nie wiem, co dokładnie autor zamierza. Z tego powodu też zalinkowałem do stackoverflow.

Link do komentarza
Udostępnij na innych stronach

Udostępnij wartość zmiennej poprzez właściwość. Np:

public int C
{
{
return c;
}
}

Brakuje słówka kluczowego get, no i tak czy siak będzie za każdym razem zwracać tę samą wartość. Coś takiego powinno działać:
public /*static*/ int C { get { return DateTime.Now.Minute; } }

Link do komentarza
Udostępnij na innych stronach

Dzięki. O to chodziło! W skrócie wyjaśnię, że robię zegarek który czyta godzinę z krokiem ustawionym przez użytkownika (wybierany w comboboxie). Wcześniej odczytywał ten sam czas od momentu zapisania ustawień, jednak po poprawieniu dwóch linijek tak jak napisaliście wszystko działa jak należy. Program prosty, dwie formy, w pierwszej sam zegar cyfrowy, w drugiej ustawienie kroku z przyciskiem do zapisania ustawień. Żadnego wpisywania danych przez użytkownika. Zadam jeszcze jedno pytanie, macie pomysł na jakieś zabezpieczenia do tego programu (oprócz modyfikatorów dostępu)?

Link do komentarza
Udostępnij na innych stronach

Trochę trudny temat, bo istotą .NETa jest kod pośredni, więc dekompilacja aplikacji jest dziecinne prosta. W zasadzie jedyna sensowna opcja to komercyjne obfuskatory, które porządnie zaszumią kod i utrudnią jego analizę. W sumie to jest zabawna sprawa, bo istnieje w .NET atrybut, który można nadać assembly by był "niedekompilowalny" i np .NET Reflector go respektuje. Natomiast wystarczy wziąć darmowego IL Spy i te pseudo zabezpieczenie jest całkowicie ignorowane ;] Parę razy spotkałem się z bibliotekami, które miały metody nazwane znakami unicode'owymi, nieczytelnymi dla człowieka, przy których niektóre aplikacje do deasemblacji się wywalały.

Napisałem o komercyjnych obfuskatorach ponieważ istnieje pokaźny zbór aplikacji, które ogarniają wiele aplikacji obfuskujących i potrafią w pewnej mierze odwrócić ich działanie.

I na koniec dodam, że Twoja własna aplikacja robi Ci pod górkę w tym temacie, ponieważ jest bardzo prosta, więc nie ważne jakby ją zaszumić, analiza tych kilku linijek kodu nie sprawi nikomu problemu.

Podsumowując: skupiłbym się na funkcjonalności, a nie na zabezpieczeniach. W (prawie) końcu w każdej licencji stoi jak byk "nie modyfikuj aplikacji, nie ponosimy odpowiedzialności za nic, co aplikacja może wybuchnąć - instalujesz na własną odpowiedzialność" ;]

Link do komentarza
Udostępnij na innych stronach

@wies.niak

Chyba nie chodzi o obfuskację tylko ochronę przed atakami w stylu buffer overflow, SQLi itd. (oczywiście w tym kodzie SQLa się nie spodziewam ale wiesz o co chodzi).

@OP

Oczywiście nie widząc kodu nie można ocenić jego bezpieczeństwa, możesz go tutaj wrzucić i razem go przeczytamy, chociaż jeśli chodzi o naukę tego typu rzeczy to C# jest słabym wyborem, dużo lepiej być dużo bliżej pamięci i widzieć co się dzieje (czyli pewnie okolice C czy asm).

Ogólnie jeżeli chcesz zabezpieczyć swoją aplikację to trzeba wymyślić sposób w jaki adwersarz może coś napsuć i mu to uniemożliwić.

niby po co logować się i szyfrować hasło do zwykłego zegarka?

A po co haksor ma zmieniać wyświetlaną godzinę? tongue_prosty.gif

Link do komentarza
Udostępnij na innych stronach

Zarchiwizowany

Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.

  • Kto przegląda   0 użytkowników

    • Brak zalogowanych użytkowników przeglądających tę stronę.
×
×
  • Utwórz nowe...