Zmiana string'a na odwołanie do statycznej klasy

0

Cześć, mam pewien problem i nie wiem czy jest to w ogóle do zrealizowania. Mam w swoim projekcie kilka statycznych klas nazwanych tak samo, tylko z inną liczbą na końcu, dla przykładu:
Class1
Class2
Class3
Class4
Class5

Każda z tych klas posiada metodę Run(). W pliku konfiguracyjnym aplikacji definiowane jest które metody Run(), z których klas mają być wywołane (podaje się tam odpowiednie numery). I tak jeśli w pliku konfiguracyjnym jest wpisane 1,3 to chciałbym wywołać metody Run() z klas 1 i 3. Czyli chodzi mi o coś takiego ("Class" + numerKlasy).Run(), tylko tutaj właśnie nie wiem jak zmienić ten string w odwołanie do odpowiedniej klasy statycznej. Jakieś pomysły?

Pozdrawiam,
Łukasz

0
switch

?

0
spartanPAGE napisał(a):

http://stackoverflow.com/questions/1044455/c-sharp-reflection-how-to-get-class-reference-from-string

Zrobiłem wg tego ale dostaję wyjątek: System.NullReferenceException: Odwołanie do obiektu nie zostało ustawione na wystąpienie obiektu. w linijce:

MethodInfo method = t.GetMethod("Run", BindingFlags.Static | BindingFlags.Public);
0

Znaczy t jest nullem. Wklej cały kod, albo lepiej sam debuguj.

0
somekind napisał(a):

Znaczy t jest nullem. Wklej cały kod, albo lepiej sam debuguj.

Dokładnie, t jest null'em - nie wiem dlaczego :/ Może dlatego, że klasę TestCase_1 mam w osobnym pliku .cs?

Type t = Type.GetType("TestCase_1");
MethodInfo method = t.GetMethod("Run", BindingFlags.Static | BindingFlags.Public);
method.Invoke(null, null);
static class TestCase_1
{
     public static void Run()
     {
         ...
     }
}
2

Nie, dlatego, że źle używasz metody GetType. Musisz jej podać pełną nazwę klasy, ze wszystkimi namespacami.

Czemu w ogóle masz klasy statyczne? To bardzo złe rozwiązanie. Gdybyś miał normalne klasy, a nie statyczne, to problem miałbyś już dawno i łatwo rozwiązany przez interfejs z metodą Run.

0
somekind napisał(a):

Nie, dlatego, że źle używasz metody GetType. Musisz jej podać pełną nazwę klasy, ze wszystkimi namespacami.

Rzeczywiście, teraz działa - dziękuję.

somekind napisał(a):

Czemu w ogóle masz klasy statyczne? To bardzo złe rozwiązanie. Gdybyś miał normalne klasy, a nie statyczne, to problem miałbyś już dawno i łatwo rozwiązany przez interfejs z metodą Run.

Nie potrzebuję tworzyć instancji. A czy mógłbyś zaprezentować jak takie rozwiązanie miało by wyglądać? (dodam, że nie jestem "jako takim" programistą - C# tylko w pewnym stopniu wykorzystuję w pracy i temat interfejsów jest mi raczej obcy w praktyce).

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