Maison  >  Article  >  développement back-end  >  Comment utiliser ILGenerator en C# pour générer dynamiquement des instances de fonctions

Comment utiliser ILGenerator en C# pour générer dynamiquement des instances de fonctions

黄舟
黄舟original
2017-09-02 15:04:461878parcourir

Cet article présente principalement le code simple d'utilisation d'ILGenerator pour générer dynamiquement des fonctions en C#. Les amis qui en ont besoin peuvent s'y référer

Il y a toujours beaucoup de fichiers de configuration dans le serveur de jeu qui doivent l'être. lu, et ces fichiers de configuration Lecture : * Sinon, il sera transformé en un type faible, qui n'est qu'un tas de chaînes ou de chiffres, et l'erreur ne sera pas visible (elle doit être vérifiée à nouveau) * Sinon, ce sera transformé en un type fort, et chaque type doit être analysé par lui-même

Je préfère personnellement ce dernier, car l'ancien code LoadConfig est simple, mais le code n'est pas simple lors de l'écriture de la logique.


class Config1 : public IConfig {
 public void Fill(EntryLine& line);
 int32_t param1;
 string param2;
 std::vector<int32_t> param3;
};
void Config1::Fill(EntryLine& line) {
 this->param1 = line.ReadInt32();
 this->param2 = line.ReadString();
 this->param3 = line.ReadVectorInt32();
}

La fonction de remplissage approximative est Comme écrit ci-dessus, c'est juste que des fonctions comme ReadInt32 sont fictives et doivent être implémentées par vous-même (hum)

Ensuite, ce genre de le code est très ennuyeux à écrire, et je n'ai pas vraiment envie de l'écrire. C'est la raison de cet article .

Il y a la désérialisation XML en C#. >


Cette désérialisation est très simple. En fait, je la veux. C'est juste que la désérialisation XML utilise Node, et l'autre est la valeur du. attribut. J'ai des éléments personnalisés dedans.
class Config1 {
 int32 param1;
 string param2;
 int[] param3;
}
XmlSerializer serializer = new XmlSerializer(typeof(Config1));
var obj = (Config1)serializer.Deserialize(stream);

Merci à Microsoft d'avoir fourni le débogage .NET La fonction de Framework me permet de déboguer le code source .NET et de voir comment Microsoft l'implémente

Après. quelques recherches, j'ai découvert qu'il avait en fait analysé Config1 lorsque XmlSerializer a été construit, puis généré des métadonnées et des méthodes Read/Write, Deserialize appelle simplement la méthode Read.

Maintenant que vous savez comment elle est implémentée, je Je pense que vous pouvez le comprendre après l'avoir étudié pendant un moment.

En gros, vous devez d'abord créer un prototype, puis programmer le prototype.

PS : je n'ai pas testé le performances encore, donc ça ne devrait pas être trop mal. Le pire est que le démarrage du serveur est quelques secondes plus lent.

XmlSerializationReaderILGen.cs

Résumé

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn