[C#] Wywoływanie funkcji z List<Object> 4463 6

O temacie

Autor RafalBudzis

Zaczęty 6.04.2013 roku

Wyświetleń 4463

Odpowiedzi 6

RafalBudzis

RafalBudzis

Użytkownicy
posty1967
Propsy808
ProfesjaSkrypter
  • Użytkownicy
Witam mam 4 klasy z różnymi polami metodami itp we wszystkich klasach mam metode która nazywa się tak samo teraz aby wywołać funkcje we wszystkich elementach listy robię coś takiego

           List<Object> Form;
            ...
            (Form[0] as klasa1).metoda();
            (Form[1] as klasa2).metoda();
            (Form[2] as klasa3).metoda();
            (Form[3] as klasa4).metoda();

chciał bym wywoływać te metody w foreach jest na to jakiś sposób ? dziedziczenie odpada bo metoda w każdej klasie robi inne rzeczy metody maja tylko wspólna nazwę.

Adanos

Adanos

Administrator
Szara eminencja
posty5204
Propsy3870
ProfesjaProgramista
  • Administrator
  • Szara eminencja
A coś takiego nie działa?
foreach(var f in Form)
   f.metoda();

RafalBudzis

RafalBudzis

Użytkownicy
posty1967
Propsy808
ProfesjaSkrypter
  • Użytkownicy
Wywala ze obiekt nie ma zdefiniowanej metody bo w klasie obiektu takiej metody nie ma pojawia się ona dopiero w klasie klasa1, klasa2 ...


RafalBudzis

RafalBudzis

Użytkownicy
posty1967
Propsy808
ProfesjaSkrypter
  • Użytkownicy
Tyle ze interfejs chyba przypisuje już do klasy(klasa1,klasa2) i obiektów chyba nie będę mógł rzutować na nazwe interfejsu ??

Mogę się mylić nigdy z tego nie korzystałem.

Tak teraz myślę może lepszym rozwiązaniem było by zrobienie jednego delegata przekazywanego w konstruktorach i w konstruktorach dopisywanie funkcji do niego ? :)

Adanos

Adanos

Administrator
Szara eminencja
posty5204
Propsy3870
ProfesjaProgramista
  • Administrator
  • Szara eminencja
Lepiej użyć interfejsu.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace test
{
   interface interfejs
   {
      void drukuj();
   }

   class KlasaA: interfejs
   {
      public void drukuj()
      {
         Console.WriteLine("Klasa A");
      }
   }

   class KlasaB: interfejs
   {
      public void drukuj()
      {
         Console.WriteLine("Klasa B");
      }
   }

   class Program
   {
      static void Main(string[] args)
      {
         List<interfejs> Klasy = new List<interfejs>();

         Klasy.Add(new KlasaA());
         Klasy.Add(new KlasaB());

         foreach (var k in Klasy)
            k.drukuj();

         Console.ReadLine();
      }
   }
}

mgr Fartuess

mgr Fartuess

Użytkownicy
Kiedyś to były czasy!
posty1485
Propsy890
ProfesjaProgramista
  • Użytkownicy
  • Kiedyś to były czasy!
Patrze jakiś topic programistyczny, myślę, że się wykaże a tu znowu Adanos wszystko załatwił :/
 
Popisuje się ciągle menda jedna...


0 użytkowników i 1 Gość przegląda ten wątek.
0 użytkowników
Do góry