Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Wartości przekazywane do atrybutów muszą być znane kompilatorowi w czasie kompilacji. Parametry atrybutu mogą być następującymi typami:
boolchar,unsigned charshort,unsigned shortint,unsigned intlong,unsigned long__int64, bez znaku __int64float,doublewchar_tchar*lub lubwchar_t*System::String*System::Type ^System::Object ^enum
Przykład: typy parametrów atrybutów
Kod
// 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
};
Przykład: Argumenty bez nazw poprzedzają nazwane argumenty
opis
Podczas określania atrybutów wszystkie argumenty nienazwane (pozycyjne) muszą poprzedzać wszystkie nazwane argumenty.
Kod
// 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
Przykład: parametr atrybutu tablicy jednowymiarowej
opis
Parametry atrybutu mogą być jednowymiarowymi tablicami poprzednich typów.
Kod
// 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{};