2017-05-09 3 views
-1

J'ai une classe "A" à partir de laquelle je veux appeler une méthode dans une autre classe "B" en passant une fonction en paramètre. La fonction passée en paramètre est dans la classe B. Alors, comment faire si j'appelle la méthode de la classe A? Je utilise Visual Studio 2008 et .NET Framework 3.5.Passer une méthode en paramètre en C# d'une classe différente

J'ai vu ce post mais il dit comment appeler une méthode principale en passant une autre méthode en tant que paramètre mais à partir de la même classe, pas de classe différente.

Par exemple, dans ce poste exemple ci-dessous est fourni:

public class Class1 
{ 
    public int Method1(string input) 
    { 
     //... do something 
     return 0; 
    } 

    public int Method2(string input) 
    { 
     //... do something different 
     return 1; 
    } 

    public bool RunTheMethod(Func<string, int> myMethodName) 
    { 
     //... do stuff 
     int i = myMethodName("My String"); 
     //... do more stuff 
     return true; 
    } 

    public bool Test() 
    { 
     return RunTheMethod(Method1); 
    } 
} 

mais comment effectuer les opérations suivantes:

public Class A 
{ 
     (...) 

     public bool Test() 
     { 
      return RunTheMethod(Method1); 
     } 

     (...) 
} 


public class B 
{ 
    public int Method1(string input) 
    { 
     //... do something 
     return 0; 
    } 

    public int Method2(string input) 
    { 
     //... do something different 
     return 1; 
    } 

    public bool RunTheMethod(Func<string, int> myMethodName) 
    { 
     //... do stuff 
     int i = myMethodName("My String"); 
     //... do more stuff 
     return true; 
    } 
} 
+0

double possible de [Méthode passer comme paramètres en utilisant C#] (http://stackoverflow.com/questions/2082615/pass-method-as-parameter-using-c-sharp) –

+0

@ StevenWood Ce n'est pas un doublon, s'il vous plaît lisez bien mon article avant de dire que c'est un doublon. Dans le post que vous avez dit, il fournit une solution si vous appelez RunTheMethod de la même classe, mais que se passe-t-il si vous appelez RunTheMethod d'une autre classe différente? En outre, le lien que vous avez fourni est déjà fourni par moi dans le post, voir le lien dans le message. – user1624552

Répondre

1

Vous devrez faire une instance de class B à puis appelez la méthode, Par exemple, modifier votre class A à:

public Class A 
{ 
     (...) 
     private B myClass = new B(); 
     public bool Test() 
     { 
      return myClass.RunTheMethod(myClass.Method1); 
     } 

     (...) 
} 
+0

Ok, mais ça marche si les méthodes de la classe B sont publiques, si elles sont privées c'est impossible, non? – user1624552

+0

Non, c'est toujours possible – Hristo

+0

Comment? si par exemple Method1 est privé, de la classe A et de la méthode Test, vous ne pouvez pas renvoyer myClass.RunTheMethod (myClass.Method1) car lorsque vous passez myClass.Method1, ce n'est pas visible. – user1624552

1

Essayez cette

public Class A 
{ 
     (...) 

     public bool Test() 
     { 
      var b = new B(); 
      return b.RunTheMethod(b.Method1); 
     } 

     (...) 
}