Aracılığıyla paylaş


BlobEncoder.MethodSignature Yöntem

Tanım

Yöntem imza blobu kodlar.

public System.Reflection.Metadata.Ecma335.MethodSignatureEncoder MethodSignature (System.Reflection.Metadata.SignatureCallingConvention convention = System.Reflection.Metadata.SignatureCallingConvention.Default, int genericParameterCount = 0, bool isInstanceMethod = false);
member this.MethodSignature : System.Reflection.Metadata.SignatureCallingConvention * int * bool -> System.Reflection.Metadata.Ecma335.MethodSignatureEncoder
Public Function MethodSignature (Optional convention As SignatureCallingConvention = System.Reflection.Metadata.SignatureCallingConvention.Default, Optional genericParameterCount As Integer = 0, Optional isInstanceMethod As Boolean = false) As MethodSignatureEncoder

Parametreler

convention
SignatureCallingConvention

Çağrı kuralı.

genericParameterCount
Int32

Genel parametre sayısı.

isInstanceMethod
Boolean

true bir örnek yöntemi imzasını kodlamak, false statik yöntem imzasını kodlamak için.

Döndürülenler

dönüş değeri ve parametreler de dahil olmak üzere imzanın geri kalanını kodlayıcı.

Özel durumlar

genericParameterCount [0, 0xffff] aralığında değil.

Örnekler

Bu örnekte, farklı yöntem imzalarının nasıl kodlanmış olduğu gösterilmektedir:

static BlobBuilder EncodeMethodSignatureParameterless()
{
    // void Method()
    var methodSignature = new BlobBuilder();

    new BlobEncoder(methodSignature).
        MethodSignature().
        Parameters(0, returnType => returnType.Void(), parameters => { });
    
    return methodSignature;
}

static BlobBuilder EncodeMethodSignaturePrimitiveTypes()
{
    // double Method(double x, double y)
    var methodSignature = new BlobBuilder();

    new BlobEncoder(methodSignature).
        MethodSignature().
        Parameters(2, returnType => returnType.Type().Double(),
        parameters => {
            parameters.AddParameter().Type().Double();
            parameters.AddParameter().Type().Double();
        });

    return methodSignature;
}

static BlobBuilder EncodeMethodSignatureClassType(MetadataBuilder metadataBuilder)
{
    // void Method(System.Threading.Thread x)
    var methodSignature = new BlobBuilder();
    
    AssemblyReferenceHandle mscorlibAssemblyRef = metadataBuilder.AddAssemblyReference(
        name: metadataBuilder.GetOrAddString("System.Threading.Thread"),
        version: new Version(4, 0, 0, 0),
        culture: default(StringHandle),
        publicKeyOrToken: default(BlobHandle),
        flags: default(AssemblyFlags),
        hashValue: default(BlobHandle));

    TypeReferenceHandle typeRef = metadataBuilder.AddTypeReference(
        mscorlibAssemblyRef,
        metadataBuilder.GetOrAddString("System.Threading"),
        metadataBuilder.GetOrAddString("Thread"));

    new BlobEncoder(methodSignature).
        MethodSignature().
        Parameters(1, returnType => returnType.Void(),
        parameters => {
            parameters.AddParameter().Type().Type(typeRef, false);
        });

    return methodSignature;
}

static BlobBuilder EncodeMethodSignatureModifiedTypes()
{
    // void Method(ref int x, int[] y)
    var methodSignature = new BlobBuilder();

    new BlobEncoder(methodSignature).
        MethodSignature().
        Parameters(2, returnType => returnType.Void(),
        parameters => {
            parameters.AddParameter().Type(isByRef: true).Int32();
            parameters.AddParameter().Type().SZArray().Int32();
        });

    return methodSignature;
}

public static BlobBuilder EncodeMethodSignatureGeneric()
{
    // void Method<T>(T x)
    var methodSignature = new BlobBuilder();

    new BlobEncoder(methodSignature).
        MethodSignature(genericParameterCount: 1).
        Parameters(1, returnType => returnType.Void(),
        parameters => {
            parameters.AddParameter().Type().GenericMethodTypeParameter(0);
        });

    return methodSignature;
}

Açıklamalar

.NET meta verilerinde yöntemleri tanımlarken veya başvururken yöntem imza blobları kullanılır. Yöntem tanımı yayma işleminin tam bir örneği için sınıf açıklamalarına bakın MetadataBuilder .

Şunlara uygulanır