Refleksyjne delegacje :)

0

Witam wszystkich forumowiczów, to mój pierwszy post na tym forum :)

Mam trochę dziwny problem i nie wiem czy ma on rozwiązanie. Chodzi o tworzenie delegacji z metod zdefiniowanych w klasie, spełniających określone kryteria (np. nazwa pasująca do wzorca). Poniżej przedstawiam fragment kodu prezentujący moje pytanie.
Zasadnicze pytanie dotyczy tego co wpisać zamiast ???? w konstruktorze

new FunkcjaSprawdzajaca( ???? )
 
using System;
using System.Reflection;
using System.Collections;

namespace Jakas {

    public delegate bool FunkcjaSprawdzajaca();

    public class MyClass {

        private bool spn_1() {
            return false;
        }
        private bool spn_2() {
            return false;
        }
        private bool spn_3() {
            return false;
        }
        private bool spn_4() {
            return false;
        }

        private ArrayList tabSpr;


        public MyClass() {
            tabSpr = new ArrayList();
            foreach(MethodInfo mi in this.GetType().GetMethods()) {
                if (mi.Name.StartsWith("spn")) {
                    FunkcjaSprawdzajaca fs = new FunkcjaSprawdzajaca( ???? ); // Tutaj powinien być jakiś uchwyt do odpowiedniej spn_X
                    tabSpr.Add(fs);
                }
            }
        }
    }
}

Proszę o informację, czy da się coś takiego osiągnąć i jeżeli tak, to jak :)

Pozdrawiam serdecznie
Sołtys

1

Spróbuj Delegate.CreateDelegate.

1
  1. Zrezygnuj z tego średniowiecznego ArrayList, użyj List<>.
  2. GetMethods() zwróci ci tylko publiczne metody, jako parametr daj flagi BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance.
  3. Jak napisał już Somekind, powinno zadziałać: FunkcjaSprawdzajaca fs = (FunkcjaSprawdzajaca)Delegate.CreateDelegate(typeof(FunkcjaSprawdzajaca), null, mi);
0

Wielkie dzięki, działa jak chciałem :)

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