[导入]Guid 结构 全局唯一标识符[C#]

表示全局唯一标识符 (GUID)。

有关此类型所有成员的列表,请参阅 Guid 成员

System.Object
   System.ValueType
      System.Guid

[Visual Basic]
<Serializable>
Public Structure Guid
   Implements IFormattable, IComparable

[C#]
[Serializable]
public struct Guid : IFormattable, IComparable

[C++]
[Serializable]
public __value struct Guid : public IFormattable, IComparable

[JScript] 在 JScript 中,可以使用 .NET Framework 中的结构,但不能定义自己的结构。

此类型的所有公共静态(Visual Basic 中为 Shared)成员对多线程操作而言都是安全的。但不保证任何实例成员是线程安全的。

GUID 是一个 128 位整数(16 字节),可用于所有需要唯一标识符的计算机和网络。此标识符重复的可能性非常小。

下面的代码示例说明如何在用户定义的类或接口上作为属性附加和读取 Guid 对象。

[Visual Basic] 
Imports System
Imports System.Runtime.InteropServices

' Guid for the interface IMyInterface.
<Guid("F9168C5E-CEB2-4faa-B6BF-329BF39FA1E4")> _
Interface IMyInterface
    Sub MyMethod()
End Interface

' Guid for the coclass MyTestClass.
<Guid("936DA01F-9ABD-4d9d-80C7-02AF85C822A8")> _
Public Class MyTestClass
    Implements IMyInterface
    
    ' 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.
    Public Sub MyMethod() Implements IMyInterface.MyMethod
    End Sub
    
    Public Shared Sub 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.
        Dim IMyInterfaceAttribute As Attribute = Attribute.GetCustomAttribute(GetType(IMyInterface), GetType(GuidAttribute))
        
        ' The Value property of GuidAttribute returns a string. 
        System.Console.WriteLine("IMyInterface Attribute: " + CType(IMyInterfaceAttribute, GuidAttribute).Value)
        
        ' Using the string to create a guid.
        Dim myGuid1 As New Guid(CType(IMyInterfaceAttribute, GuidAttribute).Value)
        ' Using a byte array to create a guid.
        Dim myGuid2 As New Guid(myGuid1.ToByteArray())
        
        ' Equals is overridden and so value comparison is done though references are different.
        If myGuid1.Equals(myGuid2) Then
            System.Console.WriteLine("myGuid1 equals myGuid2")
        Else
            System.Console.WriteLine("myGuid1 not equals myGuid2")
        End If 
        ' Equality operator can also be used to determine if two guids have same value.
        If myGuid1.ToString() = myGuid2.ToString() Then
            System.Console.WriteLine("myGuid1 == myGuid2")
        Else
            System.Console.WriteLine("myGuid1 != myGuid2")
        End If
        ' CompareTo returns 0 if the guids have same value.
        If myGuid1.CompareTo(myGuid2) = 0 Then
            System.Console.WriteLine("myGuid1 compares to myGuid2")
        Else
            System.Console.WriteLine("myGuid1 does not compare to myGuid2")
        End If 
        
        System.Console.ReadLine()

        'Output:
        'IMyInterface Attribute: F9168C5E-CEB2-4faa-B6BF-329BF39FA1E4
        'myGuid1 equals myGuid2
        'myGuid1 == myGuid2
        'myGuid1 compares to myGuid2
    End Sub
End Class

[C#] 
using System;
using System.Runtime.InteropServices;

// Guid for the interface IMyInterface.
[Guid("F9168C5E-CEB2-4faa-B6BF-329BF39FA1E4")]
interface IMyInterface
{
    void MyMethod();
}

// Guid for the coclass MyTestClass.
[Guid("936DA01F-9ABD-4d9d-80C7-02AF85C822A8")]
public class MyTestClass : IMyInterface
{
    // 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.

    public void MyMethod() {}

    public static void Main( string []args )
    {
        // 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( typeof( IMyInterface ), typeof( GuidAttribute ) );
        
        // The Value property of GuidAttribute returns a string. 
        System.Console.WriteLine( "IMyInterface Attribute: " + ((GuidAttribute)IMyInterfaceAttribute).Value );    

        // Using the string to create a guid.
        Guid myGuid1 = new Guid( ((GuidAttribute)IMyInterfaceAttribute).Value );
        // Using a byte array to create a guid.
        Guid myGuid2 = new 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" );

        System.Console.ReadLine();

        //Output.
        //IMyInterface Attribute: F9168C5E-CEB2-4faa-B6BF-329BF39FA1E4
        //myGuid1 equals myGuid2
        //myGuid1 == myGuid2
        //myGuid1 compares to myGuid2
    }
}

[C++] 
#using <mscorlib.dll>
using namespace System;
using namespace System::Runtime::InteropServices;

// Guid for the interface IMyInterface.
[Guid("F9168C5E-CEB2-4faa-B6BF-329BF39FA1E4")]
__gc __interface IMyInterface
{
    void MyMethod();
};

// Guid for the coclass MyTestClass.
[Guid("936DA01F-9ABD-4d9d-80C7-02AF85C822A8")]
public __gc class MyTestClass : public IMyInterface
{
    // 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.
public:
    void MyMethod() {}
};


void 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( __typeof( IMyInterface ), __typeof( GuidAttribute ) );
    
    // 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(__box(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 ( Guid::op_Equality ( 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(__box(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
}

[JScript] 
import System;
import System.Runtime.InteropServices;

// Guid for the interface IMyInterface.
Guid("F9168C5E-CEB2-4faa-B6BF-329BF39FA1E4") interface IMyInterface
{
    function MyMethod();
}

// Guid for the coclass MyTestClass.
public Guid("936DA01F-9ABD-4d9d-80C7-02AF85C822A8") class MyTestClass implements IMyInterface
{
    // 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.

    public function MyMethod() {}

    public static function 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.

        var IMyInterfaceAttribute : Attribute = Attribute.GetCustomAttribute(Type.GetType("IMyInterface"), GuidAttribute);
        
        // The Value property of GuidAttribute returns a string. 
        System.Console.WriteLine( "IMyInterface Attribute: " + (GuidAttribute(IMyInterfaceAttribute)).Value );    

        // Using the string to create a guid.
        var myGuid1 : Guid = new Guid( (GuidAttribute(IMyInterfaceAttribute)).Value );
        // Using a byte array to create a guid.
        var myGuid2 : Guid = new 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" );

        System.Console.ReadLine();

        //Output.
        //IMyInterface Attribute: F9168C5E-CEB2-4faa-B6BF-329BF39FA1E4
        //myGuid1 equals myGuid2
        //myGuid1 == myGuid2
        //myGuid1 compares to myGuid2
    }
}

MyTestClass.Main();

System

< Windows Server 2003 系列, Windows XP Professional, Windows XP Home Edition, Windows 2000, Windows ME, Windows NT 4.0,>

< Mscorlib.dll (在>


    文章来源:http://blog.163.com/fengmk2/blog/static/8913240200693112546307
    posted @ 2006-10-03 23:26  MK2  阅读(1446)  评论(0编辑  收藏  举报