Visual C++ .NET/Class/attribute

Материал из .Net Framework эксперт
Перейти к: навигация, поиск

Creating Custom attribute

<source lang="csharp">

  1. include "stdafx.h"

using namespace System; [AttributeUsageAttribute(AttributeTargets::Assembly | AttributeTargets::Class)] public ref class OwnerAttribute : Attribute {

  public:
     property String^ DevOwner;
     property String^ TestOwner;
     OwnerAttribute() { }

}; [ Owner(DevOwner="John") ] ref class C2 { };

int main() {

   Attribute^ attribute = Attribute::GetCustomAttribute( C2::typeid,OwnerAttribute::typeid);
   if (attribute != nullptr)
   {
        Console::WriteLine("{0}", attribute);
   }

}

 </source>


Custom attribute

<source lang="csharp">

  1. include "stdafx.h"

using namespace System; [AttributeUsageAttribute(AttributeTargets::All)] public ref class OwnerAttribute : Attribute{

  public:
     property String^ DevOwner;
     property DateTime^ CreationDate;
     OwnerAttribute(){ }
     OwnerAttribute(String^ _DevOwner)
     {
        DevOwner = _DevOwner;
     }

}; [ Owner("Smith")] ref class C1 { }; [ Owner(DevOwner="Smith") ] ref class C2 { };

 </source>


Obsolete attribute

<source lang="csharp">

  1. include "stdafx.h"

using namespace System; ref class C {

  public:
    void Method2() {}
   [Obsolete("This method is obsolete; use Method2 instead.")]
    void Method1() {}

}; int main() {

   C^ c = gcnew C();
   c->Method1();
   c->Method2();

}

 </source>


Out attribute parameter

<source lang="csharp"> // compile with: /clr:safe or /clr:pure

  1. include "stdafx.h"

using namespace System; using namespace System::Runtime::InteropServices; public ref class C1 {

      public:
      void Func([Out] String^% text)
      {
          text = "testing";
      }

}

 </source>


Use the FlagsAttribute

<source lang="csharp">

  1. include "stdafx.h"

using namespace System;

[ Flags ] enum class Color {

   Red = 1,
   Blue = 2,
   Green = 4   // use powers of 2

}; int main() {

  Console::WriteLine("Colors: {0}, {1}, {2}", Color::Red, Color::Blue,Color::Green);
  Console::WriteLine("Colors: {0:d}, {1:d}, {2:d}", Color::Red, Color::Blue,Color::Green);
  Color c = Color::Red | Color::Blue;
  String^ s1 = c.ToString("X"); 
  Console::WriteLine( s1 );
  String^ s2 = Enum::Format( Color::typeid, c , "G");
  Console::WriteLine(s2 );

}

 </source>