Kann mir jemand sagen, wie ichAnruf nach Namen in C# umsetzen kann?Wie implementiert man Anruf nach Name in C#?
Antwort
Sie können das tun Reflection mit:
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); } }
Dies ist kein Call-by-Name. http://en.wikipedia.org/wiki/Evaluation_strategy#Call_by_name –
Der OP bezieht am wahrscheinlich http://en.wikipedia.org/wiki/Evaluation_strategy#Call_by_name die aus dynamisch Aufruf einer Methode, basierend auf dem Namen unterscheidet. –
Da sie diese Antwort akzeptiert, vermute ich das OP tatsächlich zu VB.NET des bezog [CallByName] (https://msdn.microsoft.com/en-us/library/microsoft.visualbasic.interaction.callbyname) – isedwards
Wenn Sie this bedeuten, dann denke ich, die am ehesten vergleichbar Delegierten wären.
Delegierten? kannst du erklären wie ?! meinst du, nur mit einem Delegierten? –
Ron Warholics Beispiel ist ein Beispiel für einen Delegierten. –
Pass eine Lambda-Funktion anstelle eines Wertes. C# wird eifrig ausgewertet, um die Ausführung so zu verzögern, dass jede Site die übergebenen Argumente neu bewertet, die Sie benötigen, um die Argumente in eine Funktion zu packen.
int blah = 1;
void Foo(Func<int> somethingToDo) {
int result1 = somethingToDo(); // result1 = 100
blah = 5;
int result2 = somethingToDo(); // result = 500
}
Foo(() => blah * 100);
können Sie die Lazy Klasse verwenden, wenn Sie in .NET 4.0 sind ein ähnliches zu bekommen (aber nicht identisch) Wirkung. Lazy
merkt das Ergebnis so, dass wiederholte Zugriffe die Funktion nicht neu bewerten müssen.
Für diejenigen, die sich wundern, die Verwendung von 'Lazy
Eine Lambda-Funktion ist eine Möglichkeit, einen Delegierten zu generieren. –
@Steven: In der Tat sind Lambdas streng genommen keine Delegaten, sondern implizit in übereinstimmende Delegattypen umwandelbar. –
Warum nicht
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. Anruf nach Name vs normale Reihenfolge
- 2. Wie implementiert man IListSource-Schnittstelle in C++
- 3. Wie implementiert man ein Bitset in C?
- 4. Wie man threadsichere Referenzzählung in C++ implementiert
- 5. Wie implementiert man CAS in C++ 11
- 6. Wie implementiert man jScroll?
- 7. SQLite C++ - Zugriffsspalten nach Name
- 8. Wie implementiert man MapReduce in C# mit PLINQ?
- 9. Wie implementiert man einen Timer in C auf Windows
- 10. Wie implementiert man Textauswahl?
- 11. Wie implementiert man ein TreeSet in Java?
- 12. Wie implementiert man verschachtelte Artikel in Scrapy?
- 13. Wie implementiert man eine C# -Schnittstelle in F #?
- 14. C++ 11 Regex Capture-Gruppen nach Name
- 15. Wie implementiert man die Exportieren nach Excel-Funktion in SAPUI5?
- 16. Wie implementiert man Listenansicht nach Material Design Guidline in Android?
- 17. Modem Anruf in C++
- 18. Wie implementiert man nested_form gem?
- 19. Wie implementiert man Wasserkräuselungen?
- 20. Wie implementiert man die Objektkomposition in Schienen?
- 21. Wie implementiert man selektive Sichtbarkeit von Eigenschaften in C#?
- 22. Wie implementiert man WPF-ähnliche MVVM in Qt/C++/QML?
- 23. Wie implementiert man ein Cancel Event in C#
- 24. Wie implementiert man einen Wiedereintrittssperrmechanismus in Ziel-c durch GCD?
- 25. Wie implementiert man einen Speicher Transaktionsbereich in C#?
- 26. Wie implementiert man getch() - Funktion von C in Linux?
- 27. Wie implementiert man diese C++ - Quelle in Python?
- 28. Wie implementiert man eine globale Prozessvariable in C++?
- 29. Wie implementiert man eine "private/restricted" -Funktion in C?
- 30. Wie implementiert/berechnet man diese Funktion in objective-c?
Welche Version von C# verwenden Sie (was Sie Visual Studio-Version)? –
Ein Compiler in C#, wer hätte das gedacht! –
@ 0xA3: Es spielt keine Rolle, sollte es wie ein Compiler oder so ähnlich sein ... –