バイナリファイル、TCPパケットなどのバイナリ構造の「上位レベル」表現になるようにクラスを作成しています。属性をコンパイル時のデータとして定義しますか?
これは、読みやすくするために、カスタム属性を定義して、各クラスのフィールドに関する情報(バイナリバッファ内のそのフィールドのオフセット、フィールドのサイズなど)を決定することができます。
これは定数を宣言することで実現できますが、IMHOコードは非常に醜いです。だから私は、私が欲しいものを達成するための非常にエレガントな方法である属性の使用について考えました。 InteropServices.Marshalのような機能は、実際には、StructLayout、MarshalAs、FieldOffsetなどの属性を使用して、必要なものと非常によく似たものを実現します。したがって、パフォーマンスのトレードオフは、 m間違っている)。
したがって、前述のInteropServicesの属性はどのようにコンパイラ/ CLRによって処理されますか?
上記のトレードオフは価値があると思いますか?はいの場合、属性を処理する最も良い方法は、Refletionを使用するデフォルトのメソッドを使用することですか?私はこれが少し高価であることを知っているので、Reflectionではなく属性にアクセスする他の方法があると仮定しています。マーシャルはほとんどすべての方法でそれを使用しています。
ご協力いただきありがとうございます、ありがとうございます。
こんにちはマイク、答えに感謝します。これがマーシャルのメソッドが属性を処理する方法であるかどうかは分かりますか?私はそのheheについて少し不思議です。 – ptr0x
構造体とレイアウト属性は特別なもので、clrはメモリを特定の方法でレイアウトすることを意味しています。すべての細部の詳細については、これは良いリファレンスです:https://www.simple-talk.com/dotnet/.net-framework/5-tips-for-understanding-managed-unmanaged-interoperability-in-.net/ –
どうもありがとうございました! :) – ptr0x