2010-11-07 24 views
2

http://gcc.gnu.org/onlinedocs/gcc-2.95.3/objc-features_1.html#SEC2Can C# peut exécuter du code avant ou après comme principal objectif en C

Le moteur d'exécution Objective-C GNU est un moyen qui permet d'exécuter du code avant l'exécution du programme entre la fonction principale. Le code est exécuté sur une base par classe et par catégorie, via une méthode de classe spéciale + load. Mise à jour: les réponses que j'ai lues ci-dessous ne sont pas satisfaisantes. Il n'y a rien de spécial pour appeler une fonction d'un programme principal. La question est de HOOKING le SYSTÈME qui est le SYSTÈME appelle une fonction sans VOTRE PROGRAMME même conscient de cela à RUNTIME.

Au lieu de l'objectif C voir cet article sur Visual C++ (grâce à Stackoverflow gars qui répond à ma question précédente): http://www.codeguru.com/cpp/misc/misc/threadsprocesses/article.php/c6945

Sinon, il n'y avait pas besoin de l'objectif C Runtime d'inclure cette méthode de charge. Il existe bien sûr un point d'entrée principal pour le programme Objective C et s'il suffit d'appeler une méthode statique WITHIN la méthode principale, il n'y a pas grand chose :)

+0

En fait, il n'y avait * pas * besoin pour le runtime GNU Objective-C d'inclure la méthode load. Il n'existe pas dans la version Apple de Cocoa. Pourquoi pensez-vous exactement que vous en avez besoin? – JeremyP

+0

Disons que je veux créer un conteneur pour une classe d'applications, je ne veux pas que les applications soient au courant de toutes sortes de variables système comme celles que je voudrais configurer, ou quoi que ce soit d'autre. – user310291

+0

La méthode de chargement existe certainement dans Cocoa, et a toujours (depuis 10.0, de toute façon). https://developer.apple.com/documentation/objectivec/nsobject/1418815-load?language=objc – dgatwood

Répondre

5

Dans les langages OOP, puisque main est toujours dans une classe, il y a toujours un moyen pour exécuter du code avant que la fonction principale soit exécutée. En Java, il s'appelle static initialization block. Un mécanisme similaire est également disponible en C#. See this link

exemple de code:

namespace CSharpConsoleTest 
{ 
    class Program 
    { 
    static Program() 
    { 
     Console.WriteLine("Test123"); 
    } 

    static void Main(string[] args) 
    { 
     Console.WriteLine("Test111"); 
    } 
    } 
} 

Eh bien le point est d'être capable d'initialiser les variables statiques dans la classe car ils sont créés avant les variables d'instance.