Encapsulates a unique identifier of a declaration. The identifier does not contain the kind of declaration. Different declarations of different kinds can have the same identifier.
Implements
Namespace: PostSharp.Reflection
Assembly: PostSharp.dll
Syntax
public struct DeclarationIdentifier : IEquatable<DeclarationIdentifier>
Remarks
The DeclarationIdentifier concept provides an efficient mechanism to correlate
data that depend on the target declaration of the advice. Typically, such data can be computed at build time
and serialized into the aspect, then consumed at run time. Without the DeclarationIdentifier concept,
the data would be stored in a dictionary, for instance Dictionary<MethodInfo,MethodData>
where MethodData
is a custom class. However, relying on a dictionary has some performance costs. Thanks to the
the DeclarationIdentifier concept, data can be stored in an array, because the MemberIndex
is guaranteed to be unique in a given type for a given kind of member (for instance, MemberIndex is unique for all methods in the same type).
Array lookups are much faster than dictionary lookups and do not rely on reflection, which gives a significant performance benefit.
note
Although the CIL specification allows for up to 2^24 types in the same assembly and 2^24 methods (or other members) in the same type, the DeclarationIdentifier implementation assumes that there will be no more than 2^16 types in the same assembly and 2^16 members of the same kind in the same type. The AssemblyId property to be coded on 32 bits. The AssemblyId is computed by running the MD5 algorithm on the full assembly name. The probability of hash collision is approximately 10^-6 for an application of 100 assemblies and 10^-5 for an application of 1,000 assemblies. Collisions can be avoided by adding the AssemblyIdAttribute custom attribute to one of the assemblies causing a hash collision. Note that hash collisions are not automatically detected by PostSharp. However, you can build a hash collision detection program by looking at the AssemblyIdAttribute custom attribute on all assemblies of your application after PostSharp has been executed.
Fields
Name | Description |
---|---|
MaxMemberIndex | Maximum number of the same kind in the same type supported by the DeclarationIdentifier class. |
MaxTypeIndex | Maximum number of types per assembly supported by the DeclarationIdentifier class. |
Properties
Name | Description |
---|---|
AssemblyId | Gets a 29-bit of the name of the assembly containing the declaration represented by the current DeclarationIdentifier. |
IsNull | Determines whether the current DeclarationIdentifier is null. |
MemberIndex | Gets a number that uniquely identifies the member inside its declaring type, for the given member kind. |
Null | Gets a null instance of the DeclarationIdentifier type/ |
TypeIndex | Gets a number that uniquely identifies the type inside its declaring assembly. |
Methods
Name | Description |
---|---|
Equals(DeclarationIdentifier) | |
Equals(object) | |
GetDeclarationIdentifier(MemberInfo) | Gets the DeclarationIdentifier for a given declaration. |
GetDeclaringTypeIdentifier() | Gets the DeclarationIdentifier that represents the declaring type of the declaration represented by the current DeclarationIdentifier. |
GetHashCode() |
Operators
Name | Description |
---|---|
operator ==(DeclarationIdentifier, DeclarationIdentifier) | Determines whether two instances of the DeclarationIdentifier type are equal. |
operator !=(DeclarationIdentifier, DeclarationIdentifier) | Determines whether two instances of the DeclarationIdentifier type are different. |