Attribute.TypeId Property
.NET Framework 2.0
When implemented in a derived class, gets a unique identifier for this Attribute.
Namespace: System
Assembly: mscorlib (in mscorlib.dll)
Assembly: mscorlib (in mscorlib.dll)
As implemented, this identifier is merely the Type of the attribute. However, it is intended that the unique identifier be used to identify two attributes of the same type.
The following code example implements the TypeId property in a custom parameter Attribute class and shows its use.
// Example for the Attribute::TypeId property. using namespace System; using namespace System::Reflection; namespace NDP_UE_CPP { // Define a custom parameter attribute that takes a single message argument. [AttributeUsage(AttributeTargets::Parameter)] public ref class ArgumentUsageAttribute: public Attribute { protected: // This is storage for the attribute message and unique ID. String^ usageMsg; Guid instanceGUID; public: // The constructor saves the message and creates a unique identifier. ArgumentUsageAttribute( String^ UsageMsg ) { this->usageMsg = UsageMsg; this->instanceGUID = Guid::NewGuid(); } property String^ Message { // This is the Message property for the attribute. String^ get() { return usageMsg; } void set( String^ value ) { this->usageMsg = value; } } property Object^ TypeId { // Override TypeId to provide a unique identifier for the instance. virtual Object^ get() override { return instanceGUID; } } // Override ToString() to append the message to // what the base generates. virtual String^ ToString() override { return String::Concat( Attribute::ToString(), ":", usageMsg ); } }; public ref class TestClass { public: // Assign an ArgumentUsage attribute to each parameter. // Assign a ParamArray attribute to strList. void TestMethod( [ArgumentUsage("Must pass an array here.")]array<String^>^strArray, [ArgumentUsage("Can pass a param list or array here.")]array<String^>^strList ){} }; static void ShowAttributeTypeIds() { // Get the class type, and then get the MethodInfo object // for TestMethod to access its metadata. Type^ clsType = TestClass::typeid; MethodInfo^ mInfo = clsType->GetMethod( "TestMethod" ); // There will be two elements in pInfoArray, one for each parameter. array<ParameterInfo^>^pInfoArray = mInfo->GetParameters(); if ( pInfoArray != nullptr ) { // Create an instance of the param array attribute on strList. ParamArrayAttribute^ listArrayAttr = static_cast<ParamArrayAttribute^>(Attribute::GetCustomAttribute( pInfoArray[ 1 ], ParamArrayAttribute::typeid )); // Create an instance of the argument usage attribute on strArray. ArgumentUsageAttribute^ arrayUsageAttr1 = static_cast<ArgumentUsageAttribute^>(Attribute::GetCustomAttribute( pInfoArray[ 0 ], ArgumentUsageAttribute::typeid )); // Create another instance of the argument usage attribute // on strArray. ArgumentUsageAttribute^ arrayUsageAttr2 = static_cast<ArgumentUsageAttribute^>(Attribute::GetCustomAttribute( pInfoArray[ 0 ], ArgumentUsageAttribute::typeid )); // Create an instance of the argument usage attribute on strList. ArgumentUsageAttribute^ listUsageAttr = static_cast<ArgumentUsageAttribute^>(Attribute::GetCustomAttribute( pInfoArray[ 1 ], ArgumentUsageAttribute::typeid )); // Display the attributes and corresponding TypeId values. Console::WriteLine( "\n\"{0}\" \nTypeId: {1}", listArrayAttr->ToString(), listArrayAttr->TypeId ); Console::WriteLine( "\n\"{0}\" \nTypeId: {1}", arrayUsageAttr1->ToString(), arrayUsageAttr1->TypeId ); Console::WriteLine( "\n\"{0}\" \nTypeId: {1}", arrayUsageAttr2->ToString(), arrayUsageAttr2->TypeId ); Console::WriteLine( "\n\"{0}\" \nTypeId: {1}", listUsageAttr->ToString(), listUsageAttr->TypeId ); } else Console::WriteLine( "The parameters information could " "not be retrieved for method {0}.", mInfo->Name ); } } int main() { Console::WriteLine( "This example of the Attribute::TypeId property\n" "generates the following output." ); Console::WriteLine( "\nCreate instances from a derived Attribute " "class that implements TypeId, \nand then " "display the attributes and corresponding TypeId values:" ); NDP_UE_CPP::ShowAttributeTypeIds(); } /* This example of the Attribute::TypeId property generates the following output. Create instances from a derived Attribute class that implements TypeId, and then display the attributes and corresponding TypeId values: "System.ParamArrayAttribute" TypeId: System.ParamArrayAttribute "NDP_UE_CPP.ArgumentUsageAttribute:Must pass an array here." TypeId: 9316015d-1219-4ce1-b317-e71efb23d42e "NDP_UE_CPP.ArgumentUsageAttribute:Must pass an array here." TypeId: ebc1ba23-2573-4c1f-aea6-90515e733796 "NDP_UE_CPP.ArgumentUsageAttribute:Can pass a param list or array here." TypeId: 624af10b-9bba-4403-a97e-46927e7385fb */
// Example for the Attribute.TypeId property.
package NDP_UE_JSL;
import System.*;
import System.Reflection.*;
// Define a custom parameter attribute that takes a single message argument.
/** @attribute AttributeUsage(AttributeTargets.Parameter)
*/
public class ArgumentUsageAttribute extends Attribute
{
// The constructor saves the message and creates a unique identifier.
public ArgumentUsageAttribute(String usgMsg)
{
this.usageMsg = usgMsg;
this.instanceGUID = Guid.NewGuid();
} //ArgumentUsageAttribute
// This is storage for the attribute message and unique ID.
protected String usageMsg;
protected Guid instanceGUID;
// This is the Message property for the attribute.
/** @property
*/
public String get_Message()
{
return usageMsg;
} //get_Message
/** @property
*/
public void set_Message(String value)
{
usageMsg = value;
} //set_Message
// Override TypeId to provide a unique identifier for the instance.
/** @property
*/
public Object get_TypeId()
{
return (Object)instanceGUID;
} //get_TypeId
// Override ToString() to append the message to what the base generates.
public String ToString()
{
return super.ToString() + ":" + usageMsg;
} //ToString
} //ArgumentUsageAttribute
public class TestClass
{
// Assign an ArgumentUsage attribute to each parameter.
public void TestMethod(
/** @attribute ArgumentUsage("Must pass an array here.")
*/
String strArray[],
/** @attribute ArgumentUsage("Can pass a param list or array here.")
*/
/** @attribute System.ParamArray()
*/
String strList[])
{
} //TestMethod
} //TestClass
class AttributeTypeIdDemo
{
static void ShowAttributeTypeIds()
{
// Get the class type, and then get the MethodInfo object
// for TestMethod to access its metadata.
Type clsType = TestClass.class.ToType();
MethodInfo mInfo = clsType.GetMethod("TestMethod");
// There will be two elements in pInfoArray, one for each parameter.
ParameterInfo pInfoArray[] = mInfo.GetParameters();
if (pInfoArray != null) {
// Create an instance of the param array attribute on strList.
ParamArrayAttribute listArrayAttr = (ParamArrayAttribute)(
Attribute.GetCustomAttribute(pInfoArray[1],
ParamArrayAttribute.class.ToType()));
// Create an instance of the argument usage attribute on strArray.
ArgumentUsageAttribute arrayUsageAttr1 = (ArgumentUsageAttribute)(
Attribute.GetCustomAttribute(pInfoArray[0],
ArgumentUsageAttribute.class.ToType()));
// Create another instance of the argument usage attribute
// on strArray.
ArgumentUsageAttribute arrayUsageAttr2 = (ArgumentUsageAttribute)(
Attribute.GetCustomAttribute(pInfoArray[0],
ArgumentUsageAttribute.class.ToType()));
// Create an instance of the argument usage attribute on strList.
ArgumentUsageAttribute listUsageAttr = (ArgumentUsageAttribute)(
Attribute.GetCustomAttribute(pInfoArray[1],
ArgumentUsageAttribute.class.ToType()));
// Display the attributes and corresponding TypeId values.
Console.WriteLine("\n\"{0}\" \nTypeId: {1}",
listArrayAttr.ToString(), listArrayAttr.get_TypeId());
Console.WriteLine("\n\"{0}\" \nTypeId: {1}",
arrayUsageAttr1.ToString(), arrayUsageAttr1.get_TypeId());
Console.WriteLine("\n\"{0}\" \nTypeId: {1}",
arrayUsageAttr2.ToString(), arrayUsageAttr2.get_TypeId());
Console.WriteLine("\n\"{0}\" \nTypeId: {1}",
listUsageAttr.ToString(), listUsageAttr.get_TypeId());
}
else {
Console.WriteLine("The parameters information could "
+ "not be retrieved for method {0}.", mInfo.get_Name());
}
} //ShowAttributeTypeIds
public static void main(String[] args)
{
Console.WriteLine("This example of the Attribute.TypeId property\n"
+ "generates the following output.");
Console.WriteLine("\nCreate instances from a derived Attribute "
+ "class that implements TypeId, \nand then "
+ "display the attributes and corresponding TypeId values:");
ShowAttributeTypeIds();
} //main
} //AttributeTypeIdDemo
/*
This example of the Attribute.TypeId property
generates the following output.
Create instances from a derived Attribute class that implements TypeId,
and then display the attributes and corresponding TypeId values:
"System.ParamArrayAttribute"
TypeId: System.ParamArrayAttribute
"NDP_UE_JSL.ArgumentUsageAttribute@c10548ee:Must pass an array here."
TypeId: b67bef05-6ef3-4583-876b-99c38b6b662a
"NDP_UE_JSL.ArgumentUsageAttribute@c10548ee:Must pass an array here."
TypeId: 5bf96750-d43c-457f-8210-802abdd37208
"NDP_UE_JSL.ArgumentUsageAttribute@419634a1:Can pass a param list or array
here."
TypeId: 2e4fb470-ede6-4c45-b7ab-15bd7545f556
*/
Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile for Pocket PC, Windows Mobile for Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
The .NET Framework does not support all versions of every platform. For a list of the supported versions, see System Requirements.
Community Additions
ADD
Show: