Was this page helpful?
Your feedback about this content is important. Let us know what you think.
Additional feedback?
1500 characters remaining
Export (0) Print
Expand All
Important This document may not represent best practices for current development, links to downloads and other resources may no longer be valid. Current recommended version can be found here.

Attribute Parameter Types

Values passed to attributes must be known to the compiler at compile time. Attribute parameters can be of the following types:

  • bool

  • char, unsigned char

  • short, unsigned short

  • int, unsigned int

  • long, unsigned long

  • __int64, unsigned __int64

  • float, double

  • wchar_t

  • char* or wchar_t* or System::String*

  • System::Type ^

  • System::Object ^

  • enum

Code

// attribute_parameter_types.cpp
// compile with: /clr /c
using namespace System;
ref struct AStruct {};

[AttributeUsage(AttributeTargets::ReturnValue)]
ref struct Attr : public Attribute {
   Attr(AStruct ^ i){}
   Attr(bool i){}
   Attr(){}
};

ref struct MyStruct {
   static AStruct ^ x = gcnew AStruct;
   [returnvalue:Attr(x)] int Test() { return 0; }   // C3104
   [returnvalue:Attr] int Test2() { return 0; }   // OK
   [returnvalue:Attr(true)] int Test3() { return 0; }   // OK
};

Description

When specifying attributes, all unnamed (positional) arguments must precede any named arguments.

Code

// extending_metadata_c.cpp
// compile with: /clr /c
using namespace System;
[AttributeUsage(AttributeTargets::Class)]
ref class MyAttr : public Attribute {
public:
   MyAttr() {}
   MyAttr(int i) {}
   property int Priority;
   property int Version;
};

[MyAttr] 
ref class ClassA {};   // No arguments

[MyAttr(Priority = 1)] 
ref class ClassB {};   // Named argument

[MyAttr(123)] 
ref class ClassC {};   // Positional argument

[MyAttr(123, Version = 1)] 
ref class ClassD {};   // Positional and named

Description

Attribute parameters can be one-dimensional arrays of the previous types.

Code

// extending_metadata_d.cpp
// compile with: /clr /c
using namespace System;

[AttributeUsage(AttributeTargets::Class)]
public ref struct ABC : public Attribute {
   ABC(array<int>^){}
   array<double> ^ param;
};

[ABC( gcnew array<int> {1,2,3}, param = gcnew array<double>{2.71, 3.14})] 
ref struct AStruct{};

Community Additions

ADD
Show:
© 2015 Microsoft