BlobEncoder.MethodSignature 方法
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
編碼方法簽名 blob。
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
參數
- convention
- SignatureCallingConvention
叫作慣例。
- genericParameterCount
- Int32
通用參數的數量。
- isInstanceMethod
- Boolean
true 要編碼實例方法簽章,則要 false 編碼靜態方法簽章。
傳回
編碼其餘簽名部分,包括回傳值與參數。
例外狀況
genericParameterCount 不在範圍 [0, 0xffff]。
範例
以下範例展示了如何編碼不同方法簽名:
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;
}
備註
方法簽章塊用於定義或引用 .NET 元資料中的方法。 關於完整地輸出方法定義的範例,請參見 MetadataBuilder 類別備註。