Table of Contents

Class TypeDefOrRefSignature

Namespace
AsmResolver.DotNet.Signatures
Assembly
AsmResolver.DotNet.dll

Represents a type signature that references a type in the metadata tables of a .NET module.

public class TypeDefOrRefSignature : TypeSignature, ITypeDescriptor, IMemberDescriptor, IFullNameProvider, INameProvider, IModuleProvider, IImportable
Inheritance
TypeDefOrRefSignature
Implements
Inherited Members
Extension Methods

Constructors

TypeDefOrRefSignature(ITypeDefOrRef)

Creates a new type signature referencing a type in a type metadata table.

public TypeDefOrRefSignature(ITypeDefOrRef type)

Parameters

type ITypeDefOrRef

The type to reference.

TypeDefOrRefSignature(ITypeDefOrRef, bool)

Creates a new type signature referencing a type in a type metadata table.

public TypeDefOrRefSignature(ITypeDefOrRef type, bool isValueType)

Parameters

type ITypeDefOrRef

The type to reference.

isValueType bool

Indicates whether the referenced type is a value type or not.

Properties

ElementType

Gets the element type of the

public override ElementType ElementType { get; }

Property Value

ElementType

IsValueType

Gets a value indicating whether instances of this type are passed on by value or by reference.

public override bool IsValueType { get; }

Property Value

bool

Module

Gets the module that defines the member definition or reference.

public override ModuleDefinition? Module { get; }

Property Value

ModuleDefinition

Remarks

For member references, this does not obtain the module definition that the member is defined in. Rather, it obtains the module definition that references this reference.

Name

Gets the name of the object.

public override string Name { get; }

Property Value

string

Namespace

Gets the namespace the type resides in.

public override string? Namespace { get; }

Property Value

string

Scope

Gets the resolution scope that defines the type.

public override IResolutionScope? Scope { get; }

Property Value

IResolutionScope

Type

Gets the metadata type that is referenced by this signature.

public ITypeDefOrRef Type { get; set; }

Property Value

ITypeDefOrRef

Methods

AcceptVisitor<TResult>(ITypeSignatureVisitor<TResult>)

Visit the current type signature using the provided visitor.

public override TResult AcceptVisitor<TResult>(ITypeSignatureVisitor<TResult> visitor)

Parameters

visitor ITypeSignatureVisitor<TResult>

The visitor to accept.

Returns

TResult

The result the visitor produced after visiting this type signature.

Type Parameters

TResult

The type of result the visitor produces.

AcceptVisitor<TState, TResult>(ITypeSignatureVisitor<TState, TResult>, TState)

Visit the current type signature using the provided visitor.

public override TResult AcceptVisitor<TState, TResult>(ITypeSignatureVisitor<TState, TResult> visitor, TState state)

Parameters

visitor ITypeSignatureVisitor<TState, TResult>

The visitor to accept.

state TState

Additional state.

Returns

TResult

The result the visitor produced after visiting this type signature.

Type Parameters

TState

The type of additional state.

TResult

The type of result the visitor produces.

GetDirectBaseClass()

Obtains the direct base class of the type signature.

public override TypeSignature? GetDirectBaseClass()

Returns

TypeSignature

The type representing the immediate base class.

Remarks

The direct base class is computed according to the rules defined in ECMA-335 I.8.7, where interfaces will extend object, and generic base types will be instantiated with the derived classes type arguments (if any).

GetDirectlyImplementedInterfaces()

Obtains the interfaces that are directly implemented by the type.

public override IEnumerable<TypeSignature> GetDirectlyImplementedInterfaces()

Returns

IEnumerable<TypeSignature>

The interfaces.

Remarks

The result set of types is computed according to the rules defined in ECMA-335 I.8.7, where interfaces will extend object, and generic interfaces will be instantiated with the derived classes type arguments (if any).

GetReducedType()

Obtains the reduced type of the type signature.

public override TypeSignature GetReducedType()

Returns

TypeSignature

The reduced type.

Remarks

As per ECMA-335 I.8.7, the reduced type ignores the semantic differences between enumerations and the signed and unsigned integer types; treating these types the same if they have the same number of bits.

GetUnderlyingType()

Obtains the underlying type of the type signature.

public override TypeSignature GetUnderlyingType()

Returns

TypeSignature

The underlying type.

Remarks

This method computes the underlying type as per ECMA-335 I.8.7, and may therefore attempt to resolve assemblies to determine whether the type is an enum or not. It should not be confused with GetUnderlyingTypeDefOrRef(), which merely obtains the ITypeDefOrRef instance behind the type signature.

GetUnderlyingTypeDefOrRef()

Gets the underlying base type signature, without any extra adornments.

public override ITypeDefOrRef? GetUnderlyingTypeDefOrRef()

Returns

ITypeDefOrRef

The base signature.

Remarks

This is not to be confused with GetUnderlyingType(), which may resolve enum types to their underlying type representation.

IsImportedInModule(ModuleDefinition)

Determines whether the descriptor of the member is fully imported in the provided module.

public override bool IsImportedInModule(ModuleDefinition module)

Parameters

module ModuleDefinition

The module that is supposed to import the member.

Returns

bool

true if the descriptor of the member is fully imported by the module, false otherwise.

Remarks

This method verifies all references in the descriptor of the member only. It does not verify any additional data or contents (such as a method body) associated to the member.

Resolve()

Resolves the reference to a type definition.

public override TypeDefinition? Resolve()

Returns

TypeDefinition

The resolved type definition, or null if the type could not be resolved.

Remarks

This method can only be invoked if the reference was added to a module.

ToTypeDefOrRef()

Transforms the type descriptor to an instance of a ITypeDefOrRef, which can be referenced by a metadata token.

public override ITypeDefOrRef ToTypeDefOrRef()

Returns

ITypeDefOrRef

The constructed TypeDefOrRef instance.

WriteContents(in BlobSerializationContext)

Serializes the blob (without extra data) to an output stream.

protected override void WriteContents(in BlobSerializationContext context)

Parameters

context BlobSerializationContext