2008-10-21 12 views
0

Je cherche le chemin le plus propre. Je suis tenté d'utiliser les délégués pas sûr cependant.Le moyen le plus propre d'appeler dynamiquement une méthode non statique à partir d'une classe non statique?

+0

Nous avons besoin de plus d'informations sur ce que vous essayez de faire. S'il vous plaît donner un exemple. –

+0

Je ne voulais pas être trop précis puisque je suis prêt à accomoder mon code pour l'adapter à n'importe quelle solution propre. Je veux juste une solution propre avant de commencer à coder quoi que ce soit. – jdelator

+0

Oui, mais nous avons très peu d'idée de ce que vous essayez vraiment de faire. Quelles informations avez-vous? Avez-vous une instance et le nom de la méthode? Qu'en est-il des paramètres? –

Répondre

1

Êtes-vous après quelque chose comme ça?

class A 
{ 
    public int Value; 
    public int Add(int a) { return a + Value; } 
    public int Mul(int a) { return a * Value; } 
} 

class Program 
{ 
    static void Main(string[] args) 
    { 
     A a = new A(); 
     a.Value = 10; 
     Func<int, int> f; 
     f = a.Add; 
     Console.WriteLine("Add: {0}", f(5)); 
     f = a.Mul; 
     Console.WriteLine("Mul: {0}", f(5)); 
    } 
} 

Si vous avez besoin de l'objet, il est appelé à être non liée, comme des pointeurs de fonction membres C++, je ne suis pas sûr que C# soutient que. Vous pouvez toujours utiliser un lambda ou un délégué, cependant:

Func<A,int,int> f = delegate(A o, int i) { return o.Add(i); }; 
Console.WriteLine("Add: {0}", f(a, 5)); 
f = (A o, int i) => o.Mul(i); 
Console.WriteLine("Mul: {0}", f(a, 5)); 
0

Vous devrez peut-être ajouter plus de détails. Les délégués sont une bonne option, tout comme la réflexion si vous avez seulement le nom de la méthode, pas un pointeur réel.

+0

Je ne voulais pas être trop précis puisque je suis prêt à accomoder mon code pour l'intégrer dans n'importe quelle solution propre. – jdelator

Questions connexes