podstawy - wywolanie metody

0

witam wszystkich tego slonecznego ranka.
Przez noc chodziło mi po głowie pewne zagadnienie. Piszę program, króry, między innymi, zawiera następujące obiekty:
user image
Pętla główna programu, pobiera kolejne zdarzenia z evtList. I tutaj chciałbym wykonać metodę execute() klasy object, do której należy pobrany obiekt (np.my_evtX). Czy możliwe jest wywołanie execute() poprzez element listy (my_entX)?

Wydaje mi się że powinna istnieć konstrukcja pozwalająca dostać się ze zmiennej (danego obiektu), do obiektu w którym ta zmienna się znajduję. Mam nadzieje, ze rozumiecie post i znacie odpowiedz :-) </i>

0

W samym języku takiej możliwości raczej nie znajdziesz. Natomiast najprościej możesz trzymać referencje do rodzice w klasie event i stąd:

foreach(Event e in evtList) {
    e.Parent.execute()
}
0

o tym revis też myślałem. ale program jest już na tym etapie, że wymagałoby to przebicia się przez obfity kod aby dokonać zmian. Dlatego mam nadzieję,że jednak jest prostsze rozwiazanie

0

problem jest w tym, że rodzic może być klasą object , objectA , objectB . Wszystkie te klasy, są dziedzicznym od klasy procces

0

Wydaje mi się, że robisz to co najmniej odwrotnie, niż powinieneś.

Skoro rodzic może być klasą dziedziczącą po procces, to zrób List<procces> (pisownia Twoja) i w pętli wywołuj na każdym elemencie metodę execute().

P.S. Mam nadzieję, że w kodzie klasy, pola i metody nazywasz normalnie, a tutaj podałeś takie głupie nazwy na potrzeby przykładu, ale mógłbyś się bardziej postarać i pisać czytelniej.

0
somekind napisał(a)

Wydaje mi się, że robisz to co najmniej odwrotnie, niż powinieneś.

Skoro rodzic może być klasą dziedziczącą po procces, to zrób List<procces> (pisownia Twoja) i w pętli wywołuj na każdym elemencie metodę execute().

jakby takie rozwiazanie bylo mozliwe, to nie zawracalbym nikomu glowy na forum.

somekind napisał(a)

P.S. Mam nadzieję, że w kodzie klasy, pola i metody nazywasz normalnie, a tutaj podałeś takie głupie nazwy na potrzeby przykładu, ale mógłbyś się bardziej postarać i pisać czytelniej.

oczywiscie to jest tylko przyklad. celowo uzylem takich nazw zeby latwiej bylo zrozumiec problem.unikajac zaglebianiaa sie w szczegoly aplikacji. wiec to jest niepotrzebny koment

0
k_i_d napisał(a)

jakby takie rozwiazanie bylo mozliwe, to nie zawracalbym nikomu glowy na forum.

A czemu takie rozwiązanie nie jest możliwe?

wiec to jest niepotrzebny koment

Dlatego to było P.S. ;]

0

W ostatecznosci mozesz zrobic inaczej - jest to rozwiazanie "na okolo" ale skoro o kazdej innej propozycji mowisz, ze jest niemozliwa to to chociaz mozna zaimplementowac bez wiekszych efektow ubocznych:

//==================================
public class MyEvent
{
    public int Time { get; set; }
}

//==================================
public class MyObject
{
    public static List<MyObject> MyObjects = new List<MyObject>(); // <-- !
    public MyEvent MyEvent { get; set; }
    public void Execute() { }

    public MyObject() // <-- !
    {
        if (!MyObjects.Contains(this))
        {
            MyObjects.Add(this);
        }
    }

    public static void Execute(MyEvent myEvent) // <-- !
    {
        foreach (var myObject in MyObjects)
        {
            if (myObject.MyEvent == myEvent)
            {
                myObject.Execute();
            }
        }
    }
}

//==================================
var EvtList = new List<MyEvent>();
var myEvent = new MyEvent();
myEvent.Time = 10;
var myObject = new MyObject();
myObject.MyEvent = myEvent;

//..
foreach (var evtItem in EvtList)
{
    MyObject.Execute(evtItem); // <-- !
}

Wada: statyczna lista obiektow, z ktorych ktorys moze posiada przypisany MyEvent.

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