2013-09-16 19 views
5

widzę PRISM deklarując następujące konstruktora, a ja nie rozumiem, co to jest „o” jest używany z funkcją lambda, który służy jako drugi parametr, gdy konstruktor baza nazywa się:Lambda Funkcja Korzystanie nieznany parametr

public DelegateCommand(Action<T> executeMethod) 
    : this(executeMethod, (o)=>true) 
{    
} 

Byłbym wdzięczny za wyjaśnienie.

+0

to tylko parametr wejściowy do orzecznika, który nie jest używany - w tym wypadku orzeczenie zawsze zwraca wartość true - Podejrzewam, że jest to domyślny w przypadku nie orzecznikiem jest przekazywana w – BrokenGlass

+0

to [poradnik]. (http://msdn.microsoft.com/en-us/library/vstudio/bb882516.aspx) pomoże ci zrozumieć anonimowe metody i lambdę. BTW to tylko parametr wejściowy. –

Odpowiedz

3

Wzywa tego konstruktora:

DelegateCommand<T>(Action<T>, Func<T, Boolean>) 

przechodzącą lambda, która zawsze zwraca true jako drugi parametr

11

Konstruktor której zgłoszenie zostanie zaksięgowana wywołuje inny konstruktor, więc to wytłumaczyć, powinniśmy najpierw przyjrzeć pod sygnaturą drugiego konstruktora:

public DelegateCommand(Action<T> executeMethod, Func<T, bool> canExecuteMethod) 

Drugi parametr to Func<T, bool>. Oznacza to, że jest to funkcja, która przyjmuje parametr typu T i zwraca wartość logiczną.

Teraz, jeśli spojrzeć na lambda, który jest używany:

(o) => true 

lambdas w ogóle mają składnię (parameter-list) => lambda-body, więc w tym przypadku pojedynczy parametr lambda jest zmienną o (który typ jest implikowana być T) i funkcja zwraca stały wynik true.

Celem tego jest zasadniczo wykonanie polecenia, które jest zawsze wykonywalne.

Oczywiście, że lambda może wyglądać o wiele bardziej skomplikowana, więc podczas używania DelegateCommand, prawdopodobnie użyjesz bardziej złożonych i niestałych wyrażeń. Na przykład:

new DelegateCommand(DoSomething, o => o.SomeProperty >= 0 && o.SomeProperty < 10 && o.SomeBoolProperty) 
+0

Wiem, jakie są funkcje lambda i jestem zaznajomiony z PRISM i tym konstruktorem podstawowym (który może być użyty zawsze, gdy polecenie jest zawsze aktywne). Właśnie zapytałem o SKŁADNIA. Odpowiedziałeś, mówiąc "w tym przypadku pojedynczy parametr lambda jest zmienną o (której typ jest określany jako T)", ale nadal nie rozumiem, dlaczego "o", ponieważ pojedynczy parametr był już dany nazwa "executeMethod". Z góry dziękuję! – Ofer

+1

@Ofer Całe wyrażenie '(o) => true' jest typu' Func 'i jest wartością parametru konstruktora' canExecuteMethod'. 'o' jest po prostu nazwą zmiennej, dowolnie wybranej w tym przypadku, która przyjmuje argument funkcji parametru' Func '. Równie dobrze możesz nazwać parametr "parameterToTheCanExecuteMethod": '(parameterToTheCanExecuteMethod) => true'. Jeśli spowoduje to rozjaśnienie, możesz również dodać dodatkowe nawiasy: '...: this (executeMethod, ((parameterToTheCanExecuteMethod) => true))'. – poke

Powiązane problemy