2010-12-19 24 views
5

Powiedz, że mam funkcję. Chciałbym dodać odniesienie do tej funkcji w zmiennej.Odwołanie do funkcji w zmiennej?

Mogę więc nazwać funkcję "foo (bool foobar)" ze zmiennej "bar", tak jakby była funkcją. NA PRZYKŁAD. "bar (foobar)".

Jak?

Odpowiedz

17

Wygląda na to, że chcesz zapisać zmienną Func w celu późniejszego użycia. Spójrz na przykłady here:

using System; 

public class GenericFunc 
{ 
    public static void Main() 
    { 
     // Instantiate delegate to reference UppercaseString method 
     Func<string, string> convertMethod = UppercaseString; 
     string name = "Dakota"; 
     // Use delegate instance to call UppercaseString method 
     Console.WriteLine(convertMethod(name)); 
    } 

    private static string UppercaseString(string inputString) 
    { 
     return inputString.ToUpper(); 
    } 
} 

Zobacz jak metoda UppercaseString jest zapisywany do zmiennej o nazwie convertMethod które następnie mogą być później zwany: convertMethod(name).

+0

Chyba mógłbym to zrobić. Ale wtedy zostałbym zablokowany na maksimum 4 parametrów, gdybym użył metody Func <>, która byłaby preferowana. Prawdopodobnie skorzystałbym z tego, ale byłoby miło, gdybym mógł obejść ten limit. –

+0

@Ruirize: Interesujące, nigdy wcześniej nie miałem do czynienia z tym limitem, więc chyba nigdy o tym nie wiedziałem. Wygląda jednak na to, że zostało tu już wcześniej omówione, więc coś, co powinniśmy zobaczyć, to: http://stackoverflow.com/questions/3582866/func-for-5-arguments – David

+0

Brzmi świetnie! Chociaż, jeśli muszę zrobić wiele z nich dla każdej jednostki, prawdopodobnie użyję po prostu mojego tłumacza Lua. –

0

Musisz znać sygnaturę funkcji i utworzyć numer delegate.

Są gotowi delegaci for functions that return a value i for functions that have a void return type. Oba poprzednie łącza wskazują na typy ogólne, które mogą zająć do 15 argumentów typu (w ten sposób mogą służyć do funkcji zajmujących wiele argumentów).

Jeśli zamierzasz używać odwołań do funkcji w zakresie większym niż zakres lokalny, możesz rozważyć defining your own custom delegates. Ale większość czasu, Action i Func zrobić bardzo ładnie.

Aktualizacja:

Spójrz na this question dotyczące wyboru pomiędzy definiowania własnych delegatów, czy nie.

1

Szukasz Delegates?

+0

Delegaci zostali uwzględnieni, ale prawdopodobnie będę mieć ich więcej niż 400 w przyszłości i nie wszystkie z nich będą używać tego samego podpisu lub typu zwrotu. –

0

Korzystanie delegaci

void Foo(bool foobar) 
    { 
/* method implementation */ 
    } 

wykorzystujące Action delegata

Public Action<bool> Bar; 
Bar = Foo; 

wywołać funkcję;

bool foobar = true; 
Bar(foobar); 
Powiązane problemy