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

dobre pytanie dotyczące polimorfizmu

VPS Starter Arubacloud
+1 głos
212 wizyt
pytanie zadane 26 grudnia 2016 w C# przez military Obywatel (1,120 p.)
Załóżmy że mamy Grid/GroupBox w osobnej klasie, nazwijmy tę klasę B, i dziedziczy ta klasa z klasy o nazwie A (tak dziedziczenie jest potrzebne) to proszę powiedzcie mi jak wywołać funkcję Buttona(jest ona już napisana)który jest w Grid/GroupBox. W sensie... np A a=new B(); i zrobić tak żeby można było klikać na tego Buttona. Jak Wy to widzicie. Bardzo proszę o pomoc.

2 odpowiedzi

0 głosów
odpowiedź 27 grudnia 2016 przez jankustosz1 Nałogowiec (36,160 p.)
wybrane 7 stycznia 2017 przez military
 
Najlepsza

z tego co napisałeś to mówisz o czymś takim

class A
{}

class B : A
{
  public Grid jakisGrid; // ma on jakąś publiczną funkcję Click
}

jeżeli zrobisz tak jak napisałeś
A a = new B()
to bez rzutowania z typu A na B nie dostaniesz się do tego grida.
możesz zrobić coś takiego:
((B)a).jakisGrid.Click()

lub lepiej:

class A
{
  public abstract void Klikniecie();
}

class B : A
{
  public Grid jakisGrid; // ma on jakąś publiczną funkcję Click
  public override void Klikniecie()
  {
     jakisGrid.Click();
  }
}

i wtedy bez rzutowania możesz zrobić coś takiego

A a = new B();
a.Klikniecie();



Nie testowałem więc może coś nie działać albo być jakaś literówka

 

komentarz 27 grudnia 2016 przez military Obywatel (1,120 p.)

ok to teraz mam taki problem, o co chodzi?? nie mogę tworzyć własnych klas pochodnych od istniejących już klas??

komentarz 28 grudnia 2016 przez jankustosz1 Nałogowiec (36,160 p.)
Nie działa to bo klasa okna musi być pierwsza w pliku. Poszłoby gdybyś swoją wstawił pod główną.
0 głosów
odpowiedź 28 grudnia 2016 przez Dorion300 Szeryf (90,250 p.)

ok to teraz mam taki problem, o co chodzi?? nie mogę tworzyć własnych klas pochodnych od istniejących już klas??

Musisz stworzyć klasę A w osobnym pliku.

    public class A : GroupBox {
        public Button dalej;
        public A(Form mainform) {
            dalej = new Button();
            dalej.Name = "nazwa";
            dalej.Text = "tekst";
            dalej.Location = new System.Drawing.Point(20,20);
            dalej.Size = new System.Drawing.Size(100, 100);
            dalej.UseVisualStyleBackColor = true;
            mainform.Controls.Add(dalej);
        }
    }

Tak to widzę ale uważam że nie powinno się tak pisać gdyż panuje chaos w kodzie, moim zdaniem wszystkie kontrolki powinny być tworzone w klase Form1 gdyż jak widać, klasa A potrzebuje klasę Form do stworzenia miejsca dla przycisku a nie powinna.
Dlaczego nie powinna? gdyż musisz zmodyfikować metodę InitializeComponent().
Jeśli chcesz natomiast by przycisk był w groupbox'ie to musisz stworzyć przycisk dopiero po utworzeniu groupbox'a a więc stworzyć osobną metodę którą wywołujesz na końcu InitializeComponent().

komentarz 28 grudnia 2016 przez military Obywatel (1,120 p.)
Czyli klasa w osobnym pliku (logiczne) i w momencie wywołania konstruktora samemu (w funkcji w której robię new) ustalić co i jak tak?? dobrze rozumiem??

Podobne pytania

0 głosów
3 odpowiedzi 765 wizyt
0 głosów
2 odpowiedzi 466 wizyt
0 głosów
2 odpowiedzi 542 wizyt

92,952 zapytań

141,911 odpowiedzi

321,138 komentarzy

62,286 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.

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...