2010-06-22 16 views
5
public class x : y 
{  

public Func<user, bool> SendStuffAction = SendStuff; 

//overridden from y 
public override bool SendStuff(user u) 
{ 
    //do stuff 
} 

} 

Biorąc powyższy kod, gdzie SendStuff jest lokalną metodą nadpisywaną, pojawia się błąd kontekstu, który nie jest statyczny dla SendStuff. Czy uczestnik nie może wskazać metody instancji z tej samej klasy, do której istnieje metoda SendStuff?Używanie Func z metodą instancji

Błąd brzmi: nie ma dostępu do statycznej metody w niestatyczny kontekście

Co jeśli metoda jest prywatny, dlaczego nie działają wtedy.

private Func<user, bool> SendStuffAction = SendStuff; 
+1

dodaj więcej kodu. ten kawałek wygląda dobrze – Andrey

+1

może ktoś wyjaśnić, dlaczego SendStuffAction jest traktowane jako statyczne? – SWeko

+1

Jeśli używasz metody jako inicjatora pola, zawsze musi to być metoda statyczna. Nie ma możliwości zagwarantowania, że ​​instancja jest w stanie spójnym, zanim pola zostaną zainicjowane, więc metody instancji nie są dozwolone. – Toby

Odpowiedz

7

Tak, może ... ale musisz ustawić go w konstruktorze, jeśli nie zadeklarujesz jako statyczny.

class MyClass 
{ 
    public Func<loan, user, bool> SendStuffAction ; 

    MyClass() 
    { 
     SendStuffAction = SendStuff; 
    } 

    bool SendStuff(loan loanVar, user userVar) 
    { 
     return true; 
    } 
} 
+0

Dzięki, ale czy możesz wyjaśnić nieco więcej, dlaczego tak jest? –

+0

[+1 ciekawe, nie zdawałem sobie z tego sprawy] (http://stackoverflow.com/questions/923343/c-error-class-delegate-field-initializer-cannot-reference-the-non-static). Jak wspomina Toby w komentarzach głównego pytania powyżej, użycie niestatycznego elementu w inicjatorze pola otwiera go do użycia w innym miejscu, gdy tworzona instancja jest w nieznanym stanie (inicjatory wykonują w nieznanej kolejności). Możesz to zrobić w konstruktorze, ponieważ inicjatory pola zostały zakończone i masz kontrolę nad kolejnością pozostałych inicjalizacji, ale musisz zachować ostrożność. – shambulator

Powiązane problemy