Dobry den
Tak dlhsiu dobu stojim na jednom probleme ohladne vyvolania metody ak pozname jej nazov.
Riesenie mozno by sa dalo poriesit aj inym sposobom ale mna zaujima ci je aj nejaka takato moznost
Pre prikad mame nasledujucu situaciu
name vytvorene pole kore obsahuje nazvy metod (ah dufam ze som to dobre nazval ) na vyvolanie
weroro: C# vetcinou nie je interpretovany jazyk, nema eval, C# dokaze skopilovat objektovy model programu a vykonat ho za behu
BX: ak ma trieda milion metod upises sa k smrti
gm4n: pouzi reflexiu a najme do nazvov metod nedavajzatvorky
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
Dictionary<string, Func<string>> funkcie;
public Form1()
{
InitializeComponent();
funkcie = new Dictionary<string, Func<string>>
{{"Vyvolaj",delegate(){ return Vyvolaj();}},
{"VyvolajMa",delegate(){return VyvolajMa();}}
};
}
private void Form1_Load(object sender, EventArgs e)
{
foreach (KeyValuePair<string, Func<string>> o in funkcie)
{
Func<string> f = o.Value;
string str = f();
MessageBox.Show(str);
}
}
private string Vyvolaj()
{
return "Vyvolaj";
}
public string VyvolajMa()
{
return "VyvolajMa";
}
}
}
Ak by tie funkcie obsahovali parametre, odporucam pouzit lamba abstrakciu(lamba/anonymne funkcie).
Vdaka za reakcie no problem je ze je toho dost vela asi 50 preto je tam to pole ale ide aj o to ze aby sa to dalo lahko obmienat do buducna no ako premyslam tak zmyslam ale nic ma nejake rozumne nenapada este skusim hladat na inych forach. Neexistuje teda nejaky datovy typ ktpry by sa dal pouzit ako nazov ten metody ?
Ja som ti dal riesenie dynamicky volanych metod pomocou InvokeMethod(...), manager ti poskytol riesenie cez delegatov a dictionary, nic lepsie myslim ze nenajdes...
Co spominal manager, ak sa jedna o metody s parametrom tak pri mojom rieseni ich davas do posledneho parametra v InvokeMethod, staci tam dat new object[] { param1, param2, ... }
gm4n napísal:Vdaka za reakcie no problem je ze je toho dost vela asi 50 preto je tam to pole ale ide aj o to ze aby sa to dalo lahko obmienat do buducna no ako premyslam tak zmyslam ale nic ma nejake rozumne nenapada este skusim hladat na inych forach. Neexistuje teda nejaky datovy typ ktpry by sa dal pouzit ako nazov ten metody ?
Preto som prave hovoril o reflexii ( nie ze by ju ostatny nevyuzivali ale len volaju metody ),
na tvojom mieste by som najskor vydoloval vsetky metody danej triedy
MethodInfo[] metody = TvojObjekt.getType()GetMethods();
Potom by som foreach ciklom vsetky prechdazal a volal len tie co splnaju istu podminku ( narikald cast nazvu, parametre , navratova hodnota, viditelnost ). Volat ich budes ako s predchadjucich prikaldoch.
A ked tam prida dalsich 50 metod nemusis menit cast ktora sa satara o reflexiu.