2009-06-27 9 views
2

Est-il possible d'appeler une fonction non statique qui utilise une classe publique non statique dans une fonction statique en C#?Est-il possible d'appeler une fonction non statique à l'intérieur d'une fonction statique en C#?

public class MyProgram 
{ 
    private Thread thd = new Thread(myStaticFunction); 
    public AnotherClass myAnotherClass = new AnotherClass(); 

    public MyProgram() 
    { 
     thd.Start(); 
    } 

    public static void myStaticFunction() 
    { 
     myNonStaticFunction(); 
    } 

    private void myNonStaticFunction() 
    { 
     myAnotherClass.DoSomethingGood(); 
    } 
} 

Eh bien, le code invalide comme ci-dessus est ce que je dois.

Une idée?

Répondre

1

Il semble que vous vouliez transmettre des données à votre thread. Essayez ceci:

public class MyProgram 
{ 
    private Thread thd; 
    public AnotherClass myAnotherClass = new AnotherClass(); 

    public MyProgram() 
    { 
     thd = new Thread(() => myStaticFunction(this)); 
     thd.Start(); 
    } 

    public static void myStaticFunction(MyProgram instance) 
    { 
     instance.myNonStaticFunction(); 
    } 

    private void myNonStaticFunction() 
    { 
     myAnotherClass.DoSomethingGood(); 
    } 
} 
+0

Merci beaucoup! Tu as sauvé ma journée –

1

Pour appeler une fonction non statique, vous devez avoir une instance de la classe à laquelle appartient la fonction, il semble que vous deviez repenser pourquoi vous avez besoin d'une fonction statique pour appeler une fonction non statique. Peut-être cherchez-vous le modèle Singleton?

Ou peut-être vous devriez juste passer dans une fonction non-statique new Thread()

3

Pas directement pas. Vous devez avoir une instance de Program pour appeler la méthode non statique. Par exemple

public static void MyStaticFunc(Program p) { 
    p.myNonStaticFunction(); 
} 
0

n °

Fonctions non statiques, par définition, exigent une instance de classe. Si vous créez une instance de votre classe dans la fonction statique ou si vous avez une propriété Instance statique dans votre classe, vous pouvez utiliser cette référence d'objet.

0

Si la variable myAnotherClass est déclarée comme statique, alors oui, vous pouvez appeler des méthodes.

Ce n'est pas tout à fait la réponse à la question que vous avez posée, mais cela vous permettra d'appeler la méthode comme vous le souhaitez.

Questions connexes