[解決済み] Microsoft 中間言語 (MSIL) では、なぜ !0 が型なのですか?
疑問点
多くのMSILリストで、次のようなことが観察されます。
System.Nullable`1<!0> etc ...
または
class !0 etc ...
の意味は何ですか?
!0
はどのような意味を持つのでしょうか?
どのように解決するのですか?
これは、.NET アセンブリを参照するために使用するデコンパイラの癖です。 これは ildasm.exe の動作であり、Reflector や ILSpy のような他のものはこれを正しく実行します。 これを書いた Microsoft のプログラマーは近道をしたようで、IL から文字列を生成し、タイプ引数をエンコードされた方法で表示するだけで、その際に 余計な を書かずに、型引数の名前をメタデータで検索するための余分な なコードを書いていません。
を読み込む必要があります。
!n
を一般型のn番目の型引数として読む必要がある。 ここで、!0は"第一型引数"、!1は"第二型引数"、などを意味します。 Nullable<>については、MSDNの記事で'!0`が'T'を意味することが分かっているはずです。
また、次のようなものもあります。
!!T
. 2つのエクスクラメーションマークは、一般的な
メソッド
. 今回、ildasm.exe は
が行います。
を使うのではなく、型引数の名前を調べます。
!!0
. なぜプログラマがジェネリック型ではショートカットして、ジェネリックメソッドではショートカットしないのか、リバースエンジニアリングするのは困難です。 Ildasm はかなり風変わりなプログラムで、.NET の他の C++ コードとは非常に異なる C++ コーディング スタイルで書かれています。 これはインターンの課題である可能性がゼロではないので、規律正しくありません :)
Nullable" の接尾辞 `1' は、一般的な型名に対する通常のエンコーディングで、一般的な型が 1 つの型引数を持つことを示します。 つまり、Nullable<> では !1 が使われているのを見ることはありません。
ですから、単純に
!0
を "T"として読んでください。 あるいはもっと良いデコンパイラを使ってください。
関連
-
[解決済み】GDI+、JPEG画像をMemoryStreamに変換する際にジェネリックエラーが発生しました。
-
[解決済み] [Entity Framework 4.1でエンティティに関連オブジェクトを追加する際に、エンティティオブジェクトをIEntityChangeTracker.の複数のインスタンスから参照できない。
-
[解決済み】OnCollisionEnter2Dが実行されない?
-
[解決済み] DateTime型の誕生日から年齢を計算するにはどうしたらいいですか?
-
[解決済み] Microsoft Officeをインストールせずに、C#でExcel(.XLSおよび.XLSX)ファイルを作成するにはどうすればよいですか?
-
[解決済み] 型チェック:typeof、GetType、is?
-
[解決済み] なぜList<T>を継承しないのですか?
-
[解決済み] EqualsメソッドがオーバーライドされたときにGetHashCodeをオーバーライドすることが重要な理由は何ですか?
-
[解決済み] C#でHashtableよりDictionaryが好まれる理由とは?
-
[解決済み】TをEnumに拘束するGenericメソッドの作成
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】「未割り当てのローカル変数を使用」とはどういう意味ですか?
-
[解決済み] 保護レベルによりアクセス不能になりました。
-
[解決済み】リソースの読み込みに失敗した:ステータス500(内部サーバーエラー)のサーバーの応答)
-
[解決済み】EF 5 Enable-Migrations : アセンブリにコンテキストタイプが見つかりませんでした
-
[解決済み] UnityでOnCollisionEnterが呼ばれない
-
[解決済み】Moqを使用してメソッド呼び出しを検証する
-
[解決済み】C#のequal to演算子でtextとvarcharのデータ型は互換性がない
-
[解決済み】Linq 構文 - 複数列の選択
-
[解決済み】プロセスが実行されているかどうかを知るには?
-
[解決済み】データが存在しないのに読み込もうとする試みが無効である