In diesem Artikel wird hauptsächlich der einfache Code zur Verwendung von ILGenerator zum dynamischen Generieren von Funktionen in C# vorgestellt. Freunde, die ihn benötigen, können darauf zurückgreifen.
Es gibt immer viele Konfigurationsdateien auf dem Spieleserver, die vorhanden sein müssen lesen und diese Konfigurationsdateien lesen: * Andernfalls wird es in einen schwachen Typ umgewandelt, der nur aus einer Reihe von Zeichenfolgen oder Zahlen besteht, und der Fehler kann nicht erkannt werden (er muss erneut überprüft werden) * Andernfalls wird er erstellt in einen starken Typ umgewandelt werden, und jeder Typ muss für sich analysiert werden
Ich persönlich bevorzuge Letzteres, da der erstere LoadConfig-Code einfach ist, aber der Code ist beim Schreiben von Logik nicht einfach.
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(); }
Die ungefähre Füllfunktion ist Wie oben geschrieben, Funktionen wie ReadInt32 sind nur fiktiv und müssen von Ihnen selbst implementiert werden (summen)
Dann diese Art von Code Es ist sehr nervig, es zu schreiben, und das ist der Grund für diesen Artikel.
Es gibt eine XML-Deserialisierung in C#.
class Config1 { int32 param1; string param2; int[] param3; } XmlSerializer serializer = new XmlSerializer(typeof(Config1)); var obj = (Config1)serializer.Deserialize(stream);
Diese Deserialisierung ist eigentlich sehr einfach. Es ist nur so, dass die XML-Deserialisierung Node verwendet, und das andere ist der Wert des Attributs . Ich habe einige personalisierte Dinge darin.
Danke an Microsoft für die Bereitstellung des .NET-Debuggings. Die Funktion von Framework ermöglicht es mir, .NET-Quellcode zu debuggen und zu sehen, wie Microsoft ihn implementiert Nachforschungen ergaben, dass er tatsächlich Config1 analysierte, als XmlSerializer erstellt wurde, und dann einige Metadaten sowie Lese-/Schreibmethoden generierte. Deserialize ruft einfach die Read-Methode auf.
Jetzt, da Sie wissen, wie es implementiert ist, denke ich Sie können es herausfinden, nachdem Sie es eine Weile studiert haben.
Grundsätzlich müssen Sie zuerst einen Prototyp erstellen und dann den Prototyp programmieren.
PS: Ich habe die Leistung nicht getestet Dennoch sollte es nicht so schlimm sein, dass der Serverstart ein paar Sekunden langsamer ist.
XmlSerializationReaderILGen.cs
Zusammenfassung
Das obige ist der detaillierte Inhalt vonSo verwenden Sie ILGenerator in C#, um Instanzen von Funktionen dynamisch zu generieren. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!