在.NET Framework上使用Attribute

以GuidAttribute为例,示例代码为managed c++。 

using   namespace  System;
using   namespace  System::Runtime::InteropServices;

//  Guid for the interface IMyInterface.

[Guid(
" F9168C5E-CEB2-4faa-B6BF-329BF39FA1E4 " )]
public   interface   class  IMyInterface
{
public :
   
void  MyMethod();
};


//  Guid for the coclass MyTestClass.

[Guid(
" 936DA01F-9ABD-4d9d-80C7-02AF85C822A8 " )]
public   ref   class  MyTestClass:  public  IMyInterface
{
public :

   
//  Run regasm on this assembly to create .reg and .tlb files.
   
//  Reg file can be used to register this coclass in the registry.
   
//  Tlb file will be used to do interop.
    virtual   void  MyMethod(){}
};

int  main()
{
   
//  Example addresses the following in System.Runtime.InterOpServices.GuidAttribute.
   
//  How to specify the attribute on interface/coclass.
   
//  Retrieve the GuidAttribute from an interface/coclass.
   
//  Value property on GuidAttribute class.
   
//  Example addresses the following in System.Guid.
   
//  Constructor Guid(string).
   
//  Constructor Guid(ByteArray).
   
//  Equals.
   
//  Operator ==.
   
//  CompareTo.
   Attribute ^  IMyInterfaceAttribute  =  Attribute::GetCustomAttribute( IMyInterface::typeid, GuidAttribute::typeid );

   
//  The Value property of GuidAttribute returns a string. 
   System::Console::WriteLine( String::Concat(   " IMyInterface Attribute:  " , (dynamic_cast < GuidAttribute ^> (IMyInterfaceAttribute)) -> Value ) );

   
//  Using the string to create a guid.
   Guid myGuid1  =  Guid(dynamic_cast < GuidAttribute ^> (IMyInterfaceAttribute) -> Value);

   
//  Using a byte array to create a guid.
   Guid myGuid2  =  Guid(myGuid1.ToByteArray());

   
//  Equals is overridden and so value comparison is done though references are different.
    if  ( myGuid1.Equals( myGuid2 ) )
      System::Console::WriteLine(  
" myGuid1 equals myGuid2 "  );
   
else
      System::Console::WriteLine(  
" myGuid1 not equals myGuid2 "  );

   
//  Equality operator can also be used to determine if two guids have same value.
    if  ( myGuid1  ==  myGuid2 )
      System::Console::WriteLine(  
" myGuid1 == myGuid2 "  );
   
else
      System::Console::WriteLine(  
" myGuid1 != myGuid2 "  );

   
//  CompareTo returns 0 if the guids have same value.
    if  ( myGuid1.CompareTo( myGuid2 )  ==   0  )
      System::Console::WriteLine(  
" myGuid1 compares to myGuid2 "  );
   
else
      System::Console::WriteLine(  
" myGuid1 does not compare to myGuid2 "  );

   
// Output.
   
// IMyInterface Attribute: F9168C5E-CEB2-4faa-B6BF-329BF39FA1E4
   
// myGuid1 equals myGuid2
   
// myGuid1 == myGuid2
   
// myGuid1 compares to myGuid2
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值