Quelqu'un peut-il me dire comment je peux mettre en œuvre Appelez par le nom dans C#?Comment implémenter l'appel par nom en C#?
Répondre
Vous pouvez le faire en utilisant Reflection:
using System; using System.Reflection; class CallMethodByName { string name; CallMethodByName (string name) { this.name = name; } public void DisplayName() // method to call by name { Console.WriteLine (name); // prove we called it } static void Main() { // Instantiate this class CallMethodByName cmbn = new CallMethodByName ("CSO"); // Get the desired method by name: DisplayName MethodInfo methodInfo = typeof (CallMethodByName).GetMethod ("DisplayName"); // Use the instance to call the method without arguments methodInfo.Invoke (cmbn, null); } }
Ce n'est pas un appel par son nom. http://en.wikipedia.org/wiki/Evaluation_strategy#Call_by_name –
L'OP fait probablement référence à http://en.wikipedia.org/wiki/Evaluation_strategy#Call_by_name, ce qui est différent de l'appel dynamique d'une méthode basée sur le nom. –
Étant donné qu'ils ont accepté cette réponse, je soupçonne que l'OP faisait référence aux délégués [CallByName] de VB.NET (https://msdn.microsoft.com/en-us/library/microsoft.visualbasic.interaction.callbyname) – isedwards
Si vous voulez dire this, alors je pense que le plus proche équivalent serait délégués.
délégués? peux-tu expliquer comment ?! voulez-vous dire, juste en utilisant un délégué? –
L'exemple de Ron Warholic est un exemple de délégué. –
Passez une fonction lambda au lieu d'une valeur. C# est vivement évalué afin de différer l'exécution de sorte que chaque site réévalue les arguments fournis dont vous avez besoin pour envelopper les arguments dans une fonction.
int blah = 1;
void Foo(Func<int> somethingToDo) {
int result1 = somethingToDo(); // result1 = 100
blah = 5;
int result2 = somethingToDo(); // result = 500
}
Foo(() => blah * 100);
Vous pouvez utiliser la classe Lazy si vous êtes dans .NET 4.0 pour obtenir un effet similaire (mais pas identique). Lazy
mémoizes le résultat afin que les accès répétés ne doivent pas réévaluer la fonction.
Pour ceux qui se demandent, en utilisant 'Lazy
Une fonction lambda est une façon de générer un 'délégué '. –
@Steven: En effet, cependant, strictement parlant, les lambdas ne sont pas des délégués mais implicitement convertibles en types de délégués correspondants. –
Pourquoi ne pas utiliser
Microsoft.VisualBasic.Interaction.CallByName
public enum CallType
{
/// <summary>
/// Gets a value from a property.
/// </summary>
Get,
/// <summary>
/// Sets a value into a property.
/// </summary>
Let,
/// <summary>
/// Invokes a method.
/// </summary>
Method,
/// <summary>
/// Sets a value into a property.
/// </summary>
Set
}
/// <summary>
/// Allows late bound invocation of
/// properties and methods.
/// </summary>
/// <param name="target">Object implementing the property or method.</param>
/// <param name="methodName">Name of the property or method.</param>
/// <param name="callType">Specifies how to invoke the property or method.</param>
/// <param name="args">List of arguments to pass to the method.</param>
/// <returns>The result of the property or method invocation.</returns>
public static object CallByName(object target, string methodName, CallType callType, params object[] args)
{
switch (callType)
{
case CallType.Get:
{
PropertyInfo p = target.GetType().GetProperty(methodName);
return p.GetValue(target, args);
}
case CallType.Let:
case CallType.Set:
{
PropertyInfo p = target.GetType().GetProperty(methodName);
p.SetValue(target, args[0], null);
return null;
}
case CallType.Method:
{
MethodInfo m = target.GetType().GetMethod(methodName);
return m.Invoke(target, args);
}
}
return null;
}
- 1. Comment implémenter P2P en C#?
- 2. comment implémenter le temporisateur en C/C++
- 3. Comment implémenter l'encapsulation conditionnelle en C#
- 4. Comment implémenter une pile générique en C#?
- 5. Comment implémenter un singleton en C#?
- 6. Comment implémenter Global Hotkeys en C#?
- 7. Comment implémenter un bitset en C?
- 8. Comment implémenter un événement cancel en C#
- 9. Comment implémenter Excel vbA en C#
- 10. Comment implémenter le temporisateur usermode en C?
- 11. Comment implémenter la recherche ternaire en C?
- 12. Comment implémenter l'automate pushdown en C#?
- 13. C#, RichTextBox: comment implémenter le défilement ligne par ligne?
- 14. Comment implémenter UIScrollView par programme
- 15. Comment implémenter ConfigurationElement dans C#?
- 16. Comment implémenter une action Ctrl + C en C#?
- 17. implémenter la correspondance URL en C++
- 18. Comment modifier le nom d'hôte en C#?
- 19. Comment implémenter la diffusion vidéo en direct en C#?
- 20. Comment implémenter une portée de transaction de mémoire en C#?
- 21. Implémenter un serveur WebDAV en C#?
- 22. Comment implémenter Runtime pour les films en C#?
- 23. Comment implémenter des événements via l'interface en C#?
- 24. Comment implémenter WSDL fourni par un partenaire?
- 25. Invoquer une méthode Objective-C par nom
- 26. Colonnes d'accès SQLite C++ par nom
- 27. C#/WPF: Implémenter Autosave
- 28. Implémenter le code matlab en C++?
- 29. Implémenter un serveur Comet en C#
- 30. Comment puis-je implémenter adobe stratus client en C#?
Quelle version de C# vous utilisez (ce qui est votre version de Visual Studio)? –
Un compilateur en C#, qui en aurait eu! –
@ 0xA3: Cela n'a pas d'importance, ça devrait être comme un compilateur ou quelque chose comme ça ... –