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

Jak stwórzyc klasę zachowującą się jak System.Object

Object Storage Arubacloud
0 głosów
381 wizyt
pytanie zadane 11 kwietnia 2017 w C# przez Dofosh Obywatel (1,480 p.)
edycja 11 kwietnia 2017 przez Dofosh

Zależy mi na tym by moje aplikacje nie miały wielu linii bezsensownego kodu, dlatego wpadłem na pomysł by stworzyć klasę zachowującą się jak Object - czyli mogę do niej przypisać wszystko i nie będzie mi wyrzucało błędu gdy będą próbował coś przypisać do nie istniejącej zmiennej.

Klasa miała by działać mniej więcej tak

klasa _klasa = new klasa(button1, button2, button3, button4, button5);
_klasa.Text = "Wszędzie ten sam tekst, absolutnie wszędzie i to wszystko dzięki jednej linijce kodu! MUAHAHAHAAHAH";

Moim problemem tutaj jest to że nie mam pojęcia jak to zrobić, a muszę to zrobić bo dla mnie takie zaoszczędzenie linii kodu to must have.

 

3 odpowiedzi

0 głosów
odpowiedź 11 kwietnia 2017 przez adrian17 Ekspert (344,860 p.)

...słownik?

var dict = new Dictionary<string, string>();
dict["Text"] = "Costam";

Jeśli chcesz *bardzo dynamicznie* z różnymi typami to można `Dictionary<string, dynamic>`

Natomiast nie jest to ogólnie zalecane, bo jakoś nie wierzę, że masz aż tak nieustrukturyzowane dane.

takie zaoszczędzenie linii kodu to must have

Natomiast pewnie zwiększa dług technologiczny.

komentarz 11 kwietnia 2017 przez Dofosh Obywatel (1,480 p.)
Jak mam to zastosować na obiektach z System.Windows.Forms?
komentarz 11 kwietnia 2017 przez Dofosh Obywatel (1,480 p.)
Plus wątpię że w jednej linii będą mógł to zrobić tak jak zaprezentowałem w przykładzie.
komentarz 11 kwietnia 2017 przez adrian17 Ekspert (344,860 p.)

Jak mam to zastosować na obiektach z System.Windows.Forms?

Mógłbyś po prostu powiedzieć od początku, co chcesz zrobić? Bo na razie nie wiem w ogóle skąd taka potrzeba się wzięła.

komentarz 11 kwietnia 2017 przez Dofosh Obywatel (1,480 p.)
edycja 11 kwietnia 2017 przez Dofosh

Codziennie robię wiele projektów, od prostych gier po trochę bardziej zaawansowane aplikacje okienkowe i często spotykam taki problem że musze pisać kod taki jak ten poniżej

button1.Text = "":
button2.Text = "":
button3.Text = "":
button4.Text = "":
button5.Text = "":
button6.Text = "":
button7.Text = "":
button8.Text = "":
button9.Text = "":
button10.Text = "":
button11.Text = "":
button12.Text = "":
button13.Text = "":
button14.Text = "":
button15.Text = "":
button16.Text = "":

Nie jest wygodne, i zajmuje wiele linii kodu więc pewnego dnia wpadłem na pomysł by wszystkie buttony przypisać do tablicy i robić to w pętli, lecz to nadal nie było to czego oczekiwałem - było to takie zbyt nieprzyjazne, dlatego po wielu przemyśleniach wpadłem na pomysł by zrobić klasę która zachowuje się dokładnie jak Object, czyli mogę coś przypisać do zmiennej której w ogóle nie ma, lub nie ma do momentu przypisania np Buttona:

Object obj = new Object;
obj.zmienna1 = "cos"
obj.zmienna2 = 321;
obj.zmienna3 = 1.5;

Ta klasa miałaby przyjmować obiekty i móc do np .Text każdego z obiektów przypisać tą samą wartość

klasa _klasa = new klasa(button1, button2, button3);
_klasa.Text = "Wszędzie ma być ten sam tekst";
komentarz 11 kwietnia 2017 przez adrian17 Ekspert (344,860 p.)

No to jednak "najgrzeczniejsze" jest:

foreach (Button b in MyButtons) // tablica buttonow
    b.Text = "";

Przy czym niekoniecznie musisz ręcznie tworzyć tablicę. Jeśli masz np. "klawiaturę" guzików (np. jak w kalkulatorze) i wszystkie są obok siebie w hierarchii (czyli są w tej samej nadrzędnej kontrolce, np. jakimś panelu) to można zrobić tak:

foreach (Button button in MyPanel.Controls.OfType<Button>())
    button.Text = "";

 

komentarz 11 kwietnia 2017 przez Dofosh Obywatel (1,480 p.)
Liczyłem jednak na tą klasę ale foreach też może być ^^, nie umrę od używania jego.
0 głosów
odpowiedź 11 kwietnia 2017 przez jankustosz1 Nałogowiec (35,880 p.)
edycja 21 kwietnia 2017 przez jankustosz1

Skoro chcesz aby każda klasa zawierała ten sam tekst to może po prostu zrób tą zmienną statyczną - zmienisz raz dla wszystkich i w dodatku mniej pamięci.

Jeżeli jednak chcesz np. wszystkie zmienić a potem dla jednej zrobić wyjątek to możesz np. spróbować tego:

class klasa
{
private static List<klasa>klasy = new List<klasa>();

public string Tekst;
public static ChangeTekst(string t)
{

for(int i = 0; i< klasy.Count; i++)
{
klasy[i].Tekst = t;
}

}

public klasa()
{
klasy.Add(this);
}

//tak samo dla innych właściwości
}

...

klasa a = new klasa();
klasa b = new klasa();
klasa wyjatkowa = new klasa();
klasa.ChangeTekst("default");
wyjatkowa.Tekst = "inna";

Pisałem tu na forum więc mogą być błędy.

komentarz 11 kwietnia 2017 przez Dofosh Obywatel (1,480 p.)
Nie o takie coś mi chodzi ;/
komentarz 11 kwietnia 2017 przez jankustosz1 Nałogowiec (35,880 p.)
Czemu nie zrobisz zmiennej statycznej, skoro w każdej klasie ma być ta sama wartość?
komentarz 11 kwietnia 2017 przez Dofosh Obywatel (1,480 p.)
Taka sama wartość ma być tylko w jednym momencie (przy rozpoczynaniu gry od nowa), w każdym innym będzie wartość inna + to ma być coś beż udziwnień i modyfikowania obiektów z System.Windows.Forms
komentarz 11 kwietnia 2017 przez jankustosz1 Nałogowiec (35,880 p.)

Nie bardzo rozumiem jak ty to sobie wyobrażasz, aby można było tak korzystać jak ty chcesz trzeba napisać tam kod. Ewentualnie możesz wrzucić to do tablicy i zrobić sobie jakąś metodę która zamienia daną właściwość w każdym elemencie, skoro tak często z tego korzystasz. Ale przecież nie o to ci chodziło :)

Tytuł tematu to " Jak stwórzyc klasę zachowującą się jak System.Object" Z tego co mi wiadomo nie da się. Jak chcesz aby coś dziedziczyło z twojej klasy musisz sam to dziedziczenie dodać.

komentarz 11 kwietnia 2017 przez Dofosh Obywatel (1,480 p.)
No cóż, trzeba będzie sobie poradzić i bez tego.
–3 głosów
odpowiedź 11 kwietnia 2017 przez Milesq Nałogowiec (32,020 p.)
odpowiedz na to pytanie to singleton klasa mająca tylko 1 objekt

http://cpp0x.pl/kursy/Wzorce-projektowe/Wzorce-kreacyjne/singleton/161
komentarz 11 kwietnia 2017 przez Dofosh Obywatel (1,480 p.)
Mógłbyś trochę bardziej naprowadzić? Bo nie do końca rozumiem jak tego użyć

Podobne pytania

0 głosów
0 odpowiedzi 145 wizyt
0 głosów
2 odpowiedzi 378 wizyt
pytanie zadane 3 marca 2018 w C# przez Oskar Filippoto Początkujący (470 p.)

92,575 zapytań

141,424 odpowiedzi

319,649 komentarzy

61,960 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!

...