2010-12-13 5 views
1

j'ai quelques variables dans une application comme: public int temp = 10 ;Modifier code réel dans le programme

Est-il possible que je peux modifier ma variable temp pour que ma variable temp contiendra au redémarrage de l'application de la dernière valeur a été stocké dedans? Je voudrais le faire sans un fichier de configuration.

(ie je voudrais à un moment donné de modifier ma température comme: temp = x; où x est un entier et après je ferme mon application et lancez à nouveau, la variable temporaire doit contenir x et non 10)

+1

Et où serait la valeur stockée lorsque l'application n'est pas en cours d'exécution, ou l'ordinateur est redémarré? Vous avez des options limitées pour la persistance de la valeur, c'est soit un fichier ou un paramètre de registre (ou un ordinateur distant, mais c'est une autre histoire) – SWeko

+0

Et pourquoi voudriez-vous faire cela? Quel est si désagréable d'avoir un fichier de configuration? –

+0

J'étais plus curieux que disposé à le faire, était une question que j'ai eu pendant un moment et finalement eu l'occasion de le demander, étant mis dans cette situation. – Alex

Répondre

1

Je recommande de ne pas le faire pour une application de production, mais si elle est juste une curiosité morbide alors je vous suggère d'avoir une lecture à ce tutoriel : Modifying the IL at runtime. Ce n'est pas un tutoriel que j'ai réussi à faire tout le long mais il y a quelques temps j'étais intéressé à jouer avec IL/CLR et bricolé avec ça.

Tout ce que vous voulez l'utiliser pour la production devrait persister dans la variété d'options de stockage disponibles, vous pouvez utiliser: les fichiers de configuration, base de données, système de fichiers, registre, etc. Modifier le fichier exécutable est un grand chose et shouldn » t être considéré à la légère.

2

Vous besoin de persister cette valeur quelque part. Selon le type d'application que vous développez (WinForms, ASP.NET, ...) ce quelque part peut varier. Par exemple, s'il s'agit d'une application Windows, vous pouvez utiliser le Application Settings.

+0

Je suis en train de développer une application WinForm, et j'espérais éviter de créer un autre fichier pour seulement 4 entiers. Je n'avais pas hâte de transférer ce fichier après mon programme. Je vais regarder par-dessus le réglage de l'application. Merci – Alex

+0

@Badescu Alexandru, en utilisant les paramètres de l'application est très facile dans une application Windows.Tout ce que vous avez à faire est d'utiliser Visual Studio Designer pour ajouter un fichier de paramètres à votre projet qui créera une classe fortement typée que vous pourriez utiliser pour charger et enregistrer des valeurs. –

3

Eh bien, il ne doit pas nécessairement s'agir d'un fichier "config", mais il est clair qu'il doit persister quelque part. Modifier l'exécutable lui-même semble une approche plutôt drastique, pour être honnête ... les options de stockage courantes incluent le système de fichiers et le registre ... qu'est-ce que vous essayez de faire qui ne serait pas résolu de manière adéquate avec ces approches plus conventionnelles?

+0

Je suis en train de développer une application WinForm, et j'espérais éviter de créer un autre fichier pour seulement 4 entiers dont j'ai besoin. Je n'avais pas hâte de transférer ce fichier après mon programme. – Alex

+0

@Basescu: La copie d'un autre fichier est susceptible d'être une approche * beaucoup * plus propre que d'essayer de réécrire l'exécutable. Surtout que vous ne pourrez pas écraser le fichier en cours d'exécution ... –

0

Vous pouvez utiliser l'objet Paramètres dans l'application de lecture/magasin pratique des valeurs

0

Il semble qu'il y ait une raison de sécurité à votre question. Si vous ne souhaitez pas que les données soient stockées sur le disque (même chiffrées) et que l'ordinateur ne soit pas redémarré, un autre processus peut en contenir la valeur.

Il existe de nombreuses options pour la communication entre processus, mais vous devez transmettre des données cryptées.

0

Ressemble à ce que vous cherchez Orthogonal Persistence. Il y a très peu de langages de programmation qui supportent une telle fonctionnalité. Et je pense qu'il n'y a pas de langues dominantes qui soutiennent la persistance orthogonale. Réf: Orthogonal Persistence article.

Pour C#, vous devez au moins utiliser les fichiers de configuration, le registre ou la base de données.

Questions connexes