2010-09-21 24 views
16

Tôi đã chọn một số mã C# gần đây và một trong các lớp có thuộc tính Guid hiện diện phía trên nó. Tôi không hiểu điều này là gì hoặc nó được sử dụng cho cái gì.Thuộc tính Guid xuất hiện ở trên các lớp trong C# là gì?

Ai đó có thể cho tôi biết tóm tắt về nó là gì hay chỉ cho tôi theo hướng một số bài viết cung cấp thêm thông tin về điều này?

Cảm ơn!

+2

Trông giống như thế này? http://msdn.microsoft.com/en-us/library/system.runtime.interopservices.guidattribute.aspx – Tx3

+0

Có, nó trông như thế. Có sự khác biệt giữa Guid và GuidAttribute không? – Andrei

+3

khi áp dụng thuộc tính bằng cách sử dụng "[]", bạn có thể bỏ "Thuộc tính" ở cuối tên loại. Nó giả định nó ở đó. Như vậy, chúng giống nhau. – Rangoric

Trả lời

8

Đây là số nhận dạng COM đại diện cho lớp được đề cập. Lớp được thiết kế cho COM interop.

7

Hướng dẫn (Số nhận dạng duy nhất toàn cầu) được sử dụng để xác định thành phần của bạn theo thế giới bên ngoài. Khi bạn viết một dự án mà sẽ được sử dụng như COM (Component Object Model), bạn sẽ phải cung cấp một tên duy nhất. Vì lý do này, bạn cần áp dụng thuộc tính GUID.

Bạn có thể đọc thêm tại đây.

GUIDAttributeClass

8

Bạn có thể muốn có một cái nhìn tại các lớp ComVisibleAttribute để tìm hiểu thêm về cách bạn có thể làm cho các lớp học quản lý có sẵn để mã unmanaged.

[Guid] tương đương chính xác với .NET Type.AssemblyQualifiedName. Giống như

System.Object, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5561934e089 

Với sự khác biệt rõ ràng là tên kiểu .NET dễ đọc hơn. Nó là cần thiết để cho phép một chương trình để khám phá những gì DLL cần phải được nạp để sử dụng một loại. Trong trường hợp .NET, các assembly thường được tìm thấy bằng cách liệt kê GAC. Nó dựa trên tập tin.

Tuy nhiên, COM sử dụng sổ đăng ký. Sau đó hội đồng có mã nguồn bạn nhìn vào được xây dựng và đăng ký sau đó bạn có thể tìm lại [Guid] trong sổ đăng ký. Khởi động regedit.exe và điều hướng đến HKLM\Software\Classes\CLSID\{guid}. Bạn sẽ thấy các giá trị khóa đăng ký mà thời gian chạy sử dụng để tải CLR và assembly.

+0

Tôi hiện đang phát với việc hiển thị lớp .NET của mình cho COM và đã đăng ký hội đồng của tôi. Bạn có thể giải thích tại sao GUID tôi đã chỉ định bởi GuidAttribute sẽ không xuất hiện trong HKLM \ Software \ Classes \ CLSID \? – Dave

+0

Tìm kiếm địa điểm sai là giải thích điển hình. Giống như 'HKLM \ Software \ Wow6432Node \ Classes \ CLSID', trang chủ cho máy chủ COM 32 bit. –

Các vấn đề liên quan