2012-12-17 9 views
7

Zastanawiałem się, jaka jest dokładna składnia parametrów ref idla delegatów i wbudowanych funkcji lambda.Delegaci Func/Action z argumentami/parametrami referencyjnymi lub anonimowymi funkcjami

tutaj jest przykładem

jeśli funkcja jest zdefiniowana jako

public void DoSomething(int withValue) { } 

delegatem w funkcji mogą być tworzone przez

public void f() 
{ 
    Action<int> f2 = DoSomething; 
    f2(3); 
} 

jak to jest składnia, jeśli pierwotną funkcję będzie zdefiniowany jako

public void DoSomething(ref int withValue) { withValue = 3; } 

Odpowiedz

12

Trzeba zdefiniować nowy typ delegata dla tego podpisu metoda:

delegate void RefAction<in T>(ref T obj); 

public void F() 
{ 
    RefAction<int> f2 = DoSomething; 
    int x = 0; 
    f2(ref x); 
} 

Powodem .NET Framework nie obejmuje tego typu jest prawdopodobnie dlatego ref parametry nie są bardzo częste, a liczba potrzebnych typów wybucha, jeśli dodasz jeden typ delegata dla każdej możliwej kombinacji.

4

Nie można używać Action, Func<T> lub wbudowanego delegatów, ale trzeba definiować własne w tym przypadku:

delegate void ActionByRef<T>(ref T value); 

Następnie, biorąc pod uwagę to, można mieć:

int value = 3; 
ActionByRef<int> f2 = DoSomething; 
f2(ref value); 
Powiązane problemy