ホームページ  >  記事  >  バックエンド開発  >  C# で ILGenerator を使用して関数のインスタンスを動的に生成する方法

C# で ILGenerator を使用して関数のインスタンスを動的に生成する方法

黄舟
黄舟オリジナル
2017-09-02 15:04:461827ブラウズ

この記事では、ILGenerator を使用して C# で関数を動的に生成する簡単なコードを主に紹介します。必要な友人はそれを参照してください

ゲームサーバーには常に多くの設定ファイルを読み込む必要があり、これらの設定ファイル: * 必須 それ以外の場合は、単なる文字列または数値の束である弱い型に作成され、エラーは表示されません (再チェックが必要です) * それ以外の場合は、強い型に作成されます各タイプはそれ自体で解析する必要があります

私は個人的には後者を好みます。前者のLoadConfigのコードはシンプルですが、ロジックを書くときのコードは単純ではありません


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();
}

近似的な充填関数は上に書いたとおりです。 、ただし、ReadInt32 関数は架空のものであり、自分で実装する必要があります (うーん)

この種のコードを書くのは非常に面倒で、あまり書きたくないのがこの記事の理由です。

C# には XML 逆シリアル化があり、次のクラスを定義します。


class Config1 {
 int32 param1;
 string param2;
 int[] param3;
}
XmlSerializer serializer = new XmlSerializer(typeof(Config1));
var obj = (Config1)serializer.Deserialize(stream);

この逆シリアル化は非常に単純です。これは、XML 逆シリアル化が Node を使用することと、属性を使用することだけです。 1 つは属性の値です。

提供してくれた Microsoft に感謝します。.NET Framework 関数をデバッグして、Microsoft がそれをどのように実装するかを確認できます。いくつかの調査で、XmlSerializer が構築されたときに実際に Config1 を分析し、その後いくつかのメタデータと Read/Write メソッドを生成したことがわかりました。Deserialize は Read メソッドを呼び出すだけです。しばらくするとわかります。

基本的には、まずプロトタイプを理解してから、そのプロトタイプをプログラムする必要があります。

PS: パフォーマンスはまだテストされていません。最悪の場合は、サーバーの起動に数秒かかります

XmlSerializationReaderILGen.cs

概要

以上がC# で ILGenerator を使用して関数のインスタンスを動的に生成する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。