J'ai différents objets de types différents. Pour chacun d'eux, je veux appeler une méthode statique de leur classe. Toutes les classes partagent la même méthode. Comment puis-je appeler cette méthode statique sans appeler explicitement la classe?Méthode statique C# à partir de l'objet
Répondre
Vous souhaitez appeler chaque méthode sur chacune des classes individuelles? Vous devez les appeler explicitement, en référençant chaque classe individuellement.
La méthode statique de chaque classe a-t-elle le même code commun? Placez-le dans une classe statique à utiliser par toutes les autres classes ou créez une ou plusieurs méthodes d'extension.
Si ces classes étendent toutes la même classe de base, l'appel de la méthode sur la classe de base fonctionnera.
Par exemple:
public class Base
{
public static DoSomething()
{
//something
}
}
public class A: Base
{
}
public class B: Base
{
}
Les appels de méthode suivants execute le même code:
A.DoSomething();
B.DoSomething();
Base.DoSomething();
Vous pouvez accomplir cela en mettant une méthode dans chaque objet qui appelle la méthode statique correspondante. Cependant, le fait que vous vouliez faire cela suggère que votre conception pourrait être améliorée. Si vous nous disiez ce que vous essayez d'accomplir, quelqu'un pourrait proposer une meilleure approche.
Est-ce que vous cherchez quelque chose comme vous avez quelque chose comme List<object>
où tous les objets sont garantis d'avoir une méthode statique nommée, par exemple MethodX()?
Si oui, vous pouvez réfléchir sur eux, recherchez le nom de la méthode et l'exécuter.
Soit cela ou l'héritage comme les autres mentionnent (ce qui serait la bonne façon d'y aller).
Si vous avez besoin d'une implémentation spécifique pour chaque type, je ne pense pas qu'une méthode statique soit la bonne approche ... Au lieu de cela, vous devez définir une interface implémentée par toutes vos classes. Vous pouvez ensuite appeler la méthode d'instance définie par l'interface sur chaque objet:
public interface IDoSomething
{
void DoSomething();
}
public class A: IDoSomething
{
public void DoSomething()
{
// implementation for A
}
}
public class B: IDoSomething
{
public void DoSomething()
{
// implementation for B
}
}
Bien sûr, si vous n'avez pas besoin d'une mise en œuvre spécifique pour chaque type, vous pouvez simplement appeler Base.DoSomething (comme expliqué par David)
Je ne sais pas exactement ce que vous essayez de faire. Mais en utilisant mon imagination, je viens avec cette mise en œuvre.
internal class Program
{
private static void Main(string[] args)
{
var staticMethodClasses = new List<StaticMethodClassBase>
{new ClassA(), new ClassB()};
foreach (StaticMethodClassBase item in staticMethodClasses)
{
Type t = item.GetType();
MethodInfo staticMethod =
t.GetMethod("DoSomething", BindingFlags.Static | BindingFlags.Public);
staticMethod.Invoke(null, null);
}
}
}
public abstract class StaticMethodClassBase
{
}
public class ClassA : StaticMethodClassBase
{
public static void DoSomething()
{
Console.WriteLine("Class A");
}
}
public class ClassB : StaticMethodClassBase
{
public static void DoSomething()
{
Console.WriteLine("Class B");
}
}
- 1. C++ MI modèle statique - méthode statique disapears à rejoindre
- 2. Accès à une méthode statique en C#
- 3. Appel d'une méthode non statique à partir d'une méthode statique en Python
- 4. Accès à la méthode statique personnalisée PHP
- 5. Problèmes de lien C++ avec la méthode statique
- 6. Appel d'une méthode Web à partir de C++
- 7. Comment appeler une méthode IronPython 2 à partir de C#
- 8. Méthode de service ou méthode statique de domaine dans Grails?
- 9. Est-il possible d'obtenir le nom de la classe à partir d'une méthode statique?
- 10. Passage d'une méthode C++ à une méthode Objective-C
- 11. C# appelle une méthode statique à l'exécution sans une référence de temps de construction?
- 12. Lorsque créer une méthode statique
- 13. Le moyen le plus propre d'appeler dynamiquement une méthode non statique à partir d'une classe non statique?
- 14. refactorisation méthode/champ statique statique pour les tests
- 15. Appeler une méthode non statique côté serveur à partir du client en utilisant JavsScript
- 16. Quelle classe a appelé ma méthode statique?
- 17. Ecriture d'un cookie à partir d'une classe statique
- 18. appel C# méthode avec des paramètres à partir des données
- 19. C++ modèle initialisation pointeur à membre statique
- 20. Comment utiliser System :: Threading :: Interlocked :: Increment sur une variable statique à partir de C++/CLI?
- 21. Liaison statique en C#
- 22. Appel de la méthode statique à partir de la classe B (extension de la classe A) de la classe A
- 23. jmock se moquer d'une méthode statique
- 24. Instance statique Objective-c
- 25. C# Variable statique apprécient oublie
- 26. Puis-je appeler une méthode statique dans une autre méthode?
- 27. C++ appel de méthode Membre statique sur instance de la classe
- 28. java: variable non statique ne peut pas être référencée à partir d'un contexte statique Erreur
- 29. Conversion d'ActionResult en chaîne URL dans une méthode statique
- 30. Comment passer une référence de méthode à une méthode différente en C#
Pourriez-vous nous donner plus de contexte? –