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

public Func<user, bool> SendStuffAction = SendStuff; 

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

} 

Tomando el código anterior, donde SendStuff es un método de instancia local anulado, aparece un error de contexto que SendStuff no es estático. ¿No puede un delegado señalar un método de instancia dentro de la misma clase en la que existe el método SendStuff?Usando Func con el método de instancia

de error es: no se puede acceder método estático en un contexto no estático

¿Qué pasa si el método es privado, ¿por qué no funciona, entonces.

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

publicar más código. esta pieza se ve bien – Andrey

+1

¿alguien puede explicar por qué SendStuffAction se trata como estático? – SWeko

+1

Si usa un método como inicializador de campo, siempre tiene que ser un método estático. No hay forma de garantizar que la instancia esté en un estado constante antes de que se inicialicen los campos, por lo que los métodos de instancia no están permitidos. – Toby

Respuesta

7

Sí, puede ... pero, debe establecerlo en el constructor si no declara como estático.

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

    MyClass() 
    { 
     SendStuffAction = SendStuff; 
    } 

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

Gracias, pero ¿puedes explicar un poco más por qué es esto? –

+0

[+1 interesante, no se había dado cuenta de esto] (http://stackoverflow.com/questions/923343/c-error-class-delegate-field-initializer-cannot-reference-the-non-static). Como Toby menciona en los comentarios de la pregunta principal anterior, el uso de un miembro no estático en un inicializador de campo lo abre para usarlo en otro lugar mientras la instancia que se está construyendo está en un estado desconocido (los inicializadores se ejecutan en un orden desconocido). Se le permite hacerlo en el constructor, porque los inicializadores de campo han finalizado y usted tiene control sobre el orden de cualquier inicialización restante, aunque todavía debe tener cuidado. – shambulator

Cuestiones relacionadas