76 votes

Blocs de code statique

Passer de Java à C# J'ai la question suivante : En Java, je pourrais faire ce qui suit :

public class Application {
    static int attribute;
    static {
        attribute = 5;
    }
   // ... rest of code
}

Je sais que je peux l'initialiser à partir du constructeur mais cela ne répond pas à mes besoins (je veux initialiser et appeler quelques fonctions utilitaires sans créer l'objet). Est-ce que C# supporte cela ? Si oui, comment puis-je le faire ?

Merci d'avance,

136voto

parapura rajkumar Points 16597
public class Application
{     

    static int attribute;     
    static Application()
    {         
         attribute = 5;     
    }    // removed
}

Vous pouvez utiliser l'équivalent en C# Constructeurs statiques . Ne le confondez pas avec un constructeur ordinaire. Un constructeur normal n'a pas de static devant elle.

Je suppose que votre //... rest of the code doivent également être exécutés une fois. Si vous ne disposez pas d'un tel code, vous pouvez simplement faire ceci.

 public class Application
 {     

    static int attribute = 5;
 }

0 votes

@parapura ceci créera une instance de l'objet Application, je veux exécuter le bloc statique sans créer l'objet.

3 votes

@GETah It won't... Remarquez le static

0 votes

@parapurarajkumar quand l'instruction 'attribute=5;' sera-t-elle exécutée ?

12voto

Ajai Points 1010

Vous pouvez simplement écrire un bloc constructeur statique comme ceci,

static Application(){
 attribute=5;
}

C'est ce à quoi j'ai pu penser.

0 votes

Ceci va créer une instance de l'objet Application, je veux exécuter le bloc statique sans créer l'objet.

2 votes

@GETah : Il ne le fera pas puisque le mot clé static est utilisé.

0 votes

"Un constructeur statique est appelé automatiquement pour initialiser la classe avant que la première instance soit créée ou que des membres statiques soient référencés." msdn.microsoft.com/fr/us/library/k9x6w0hc(v=vs.80).aspx consultez cette page

3voto

Phil Klein Points 4169

Dans votre scénario particulier, vous pourriez faire ce qui suit :

public class Application { 
    static int attribute = 5;
   // ... rest of code 
}

UPDATE :

On dirait que vous voulez appeler une méthode statique. Vous pouvez le faire comme suit :

public static class Application {
    static int attribute = 5;

    public static int UtilityMethod(int x) {
        return x + attribute;
    }
}

2voto

vikas Chaturvedi Points 351

-Un constructeur statique n'a pas de paramètre.
-Une classe statique ne peut contenir qu'un seul constructeur statique.
-Un constructeur statique s'exécute en premier lorsque nous exécutons le programme.

Exemple :

namespace InterviewPreparation  
{  
    public static class Program  
    {  //static Class
        static Program()  
        { //Static constructor
            Console.WriteLine("This is static consturctor.");  
        }  
        public static void Main()  
        { //static main method
            Console.WriteLine("This is main function.");  
            Console.ReadKey();  
        }  
    }  
}  

Sortie :
C'est un constructeur statique.
C'est la fonction principale.

0 votes

Bienvenue sur Stackoverflow.

1voto

ice1000 Points 3335

J'ai trouvé autre chose d'utile. Si votre variable a besoin de plus d'une expression/état pour être initialisée, utilisez ceci !

static A a = new Func<A>(() => {
   // do it here
   return new A();
})();

Cette approche n'est pas limitée aux classes.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X