3

たとえばout、C# でキーワードを使用するメソッドのパラメーターは、アンパサンドが前に付いたメタデータ シグネチャに表示され&ます。汎用メソッドの署名を作成しようとしていますが、これを理解するためにメタデータ API を使用したくありません。確かにどこかに文書化されていますか?

Socket クラスの BeginReceiveFrom の意味の例を次に示します。

        System.IAsyncResult([]System.Byte,System.Int32,System.Int32,
    System.Net.Sockets.SocketFlags,&System.Net.EndPoint,
System.AsyncCallback,System.Object)
4

2 に答える 2

7
于 2009-07-01T20:35:52.913 に答える
2

!!Tジェネリック パラメータを参照するために使用するジェネリック メソッドを宣言するには、次のようにします。

.method public static void Method<T1, T2>(!!T1 arg1, !!T2 arg2) {
    // ...
}

または、その番号を使用できます。

.method public static void Method<T1, T2>(!!0 arg1, !!1 arg2)

ジェネリック メソッドを呼び出すには、インスタンス化を提供します。ただし、インスタンス化で参照される型は、呼び出し元のメソッドではなく、呼び出されたメソッドに関するものです。

ldc.i4.1
newobj instance void [mscorlib]System.Object::.ctor()

// !!0 and !!1 refer to the generic parameters of Method<T1, T2>,
// not any generic method this call instruction is part of
call void Method<int32, object>(!!0,!!1)

メソッドがジェネリック型の一部である場合は!T、同様の方法で型パラメーターを参照するために使用して型のインスタンス化を指定します。ジェネリック型では、型名の後に ` があり、その後にジェネリック引数の数が続くのが規則であることに注意してください。

call instance void MyGenericType`1<int32>::Method(!0)
于 2011-02-21T23:34:07.157 に答える