Jak w C# w funkcji przekazać nazwę obiektu?

0

Witam,

Od razu napiszę, że jestem początkujący i proszę o wyrozumiałość. Oto moje pytanie: jak w C# przekazać w funkcji nazwę obiektu (np. Comboboxa) i jak później ją wykorzystać? Napisałem taką funkcję:

public void funkcja(string nazwa_obiektu)
{
nazwa_obiektu.Text = "Przykładowy tekst."; //jak prawidłowo odwołać się do takiego obiektu?
}

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

0

nie przekazuj nazwy obiektu, przekazuj obiekt...

public void funkcja(ComboBox cb)
0

Hmm, a co jeżeli raz używam Comboboxa, a raz np. Listboxa, wtedy typ też musi się jakoś zmieniać.

0

"Język C# ma wiele cech [...] obiektowość z hierarchią o jednym elemencie nadrzędnym"
http://pl.wikipedia.org/wiki/C_Sharp

0

Przekazuj typ wspólny dla typów, jakie przekazujesz do funkcji - w razie potrzeby zawsze będziesz mógł zrzutować na odpowiedni typ pochodny.

W języku C# wszystkie typy pochodzą od System.Object, ale akurat wszystkie kontrolki od System.Windows.Forms.Control.

0

Hmm, a co jeżeli raz używam Comboboxa, a raz np. Listboxa, wtedy typ też musi się jakoś zmieniać.
Coś chyba za dużo kombinujesz.
Co chcesz osiągnąć?

0

Już sobie poradziłem. Stworzyłem osobną funkcję na Listboxa i osobną na Comboboxa. Wielkie dzięki wszystkim za pomoc.

3

Już sobie poradziłem. Stworzyłem osobną funkcję na Listboxa i osobną na Comboboxa. Wielkie dzięki wszystkim za pomoc.

Jeśli to była ironia to szkoda. Jeśli to nie była ironia to też źle ;). Widać że dobrze kombinujesz (chcesz uniknąć duplikowania kodu), ale za łatwo się poddajesz.

Azariena posłuchałeś, @Ktos-ia już nie, a szkoda.

W języku C# wszystkie typy pochodzą od System.Object, ale akurat wszystkie kontrolki od System.Windows.Forms.Control.

To podstawy obiektowości, będziesz miał ciężkie życie jeśli tego nie zrozumiesz (tzn. mówię o polimorfiźnie, a nie o tym co dziedziczy z Control).

Przykład:

class Bazowa
{
    public string Pole { get; set; }
}

class Pochodna : Bazowa
{
    public string InnePole { get; set; }
}

class Całka : Bazowa
{
    public string JeszczeInnePole { get; set; }
}

Masz trzy (bezsensowne) klasy, z czego dwie dziedziczą z klasy bazowej.

Załóżmy że chcesz napisać funkcję zmieniającą Pole w Pochodnej i Całce (nazwa nie ma żadnego znaczenia, oczywiście). Twoje rozwiązanie wygląda tak:

public void Zrób(Pochodna p)
{
    p.Pole = "coś";
}

public void Zrób(Całka p)
{
    p.Pole = "coś";
}

Ale to bez sensu, bo dużo lepiej zrobić tak:

public void Zrób(Bazowa b)
{
    b.Pole = "coś";
}

Zadziała to dla dowolnej klasy dziedziczącej z Bazowej:

void Test() 
{
    Pochodna p = new Pochodna();
    Całka c = new Całka();
    Zrób(p);
    Zrób(c);
}

Jeśli to dla Ciebie proste/oczywiste: podstaw pod 'Bazowa' klasę 'Control', pod 'Pochodna', 'ListBox', pod 'Całka', 'Combobox' i gotowe.

0

Dzięki za wyjaśnienie, kiedyś miałem jakieś podstawy z tego (w C++), ale zbytnio z tego nie korzystałem. Kod wykorzystany :)

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