2012-01-17 34 views
11

ví dụ:Chú thích DispId trong C# là gì?

public interface IWMPSettings 

     [DispId(101)] 
     bool autoStart { get; set; } 
     [DispId(102)] 
     int balance { get; set; } 

hữu ích hay chỉ tự động tạo cho trình biên dịch?

+0

@Will Vousden chúng tôi phải đồng ý không đồng ý. Tôi không phải là một lập trình viên C++/C#. – IAdapter

+0

Công bằng đủ, nhưng có lẽ thích hợp hơn sau đó sẽ được yêu cầu những gì COM công nhận định danh là, kể từ MSDN cho bạn biết đây là những gì 'DispId' là dành cho! –

+1

Điều đó có nghĩa là bạn đang làm sai. Dự án + Thêm tài liệu tham khảo, duyệt tab, chọn c: \ windows \ system32 \ wmp.dll. Bây giờ bạn đã xác định loại WMPLib.IWMPSettings. –

Trả lời

13

Nói tóm lại, có nó là hữu ích, nhưng chỉ dành cho COM văn:

The DispIdAttribute (từ MSDN):

Chỉ định dạng COM văn (DISPID) của một phương pháp, lĩnh vực, hoặc tài sản .

Thuộc tính này chứa DISPID cho phương thức, trường hoặc thuộc tính mô tả. DISPID duy nhất thường được chỉ định bởi thời gian chạy ngôn ngữ chung, nhưng bạn có thể sử dụng thuộc tính này để gán một DISPID cụ thể cho một phương thức. Khi nhập một thư viện kiểu, thuộc tính này được áp dụng cho tất cả các phương thức với DISPID được gán. Điều này đảm bảo rằng bất kỳ việc thực hiện được quản lý nào của cùng một phương thức vẫn giữ cùng DISPID nếu được tiếp xúc với COM.

+0

Tôi không hiểu. Tôi không phải lập trình viên C#. Điều đó có ý nghĩa gì đối với tôi với tư cách là nhà phát triển? – IAdapter

+2

@IAdapter Nếu loại của bạn là COM có thể nhìn thấy và bạn mong đợi họ được gọi thông qua mã COM (không. Net) thì bạn * có thể * cần phải sử dụng thuộc tính này. Nó sẽ không ảnh hưởng đến bất kỳ mã nào gọi các phương thức này từ .Net tuy nhiên, vì vậy nếu mã của bạn là tất cả .Net, thuộc tính là thừa. –

+0

Đây có phải là cách thích hợp để làm theo một số điều trên: Về cơ bản nếu bạn định lấy từng phương pháp, thuộc tính và trường của bạn và chỉ thực hiện một lần, trong cùng một assembly, trong cùng một lớp, v.v. là không cần thiết, * thậm chí * khi sử dụng COM trong VB6 hoặc bất cứ điều gì khác để truy cập nó. Tuy nhiên, nếu bạn sử dụng phương thức, trường hoặc thuộc tính và triển khai nó trong các dll khác nhau hoặc thực hiện điều gì đó khác (có thể hỗ trợ các nền tảng khác theo cách thủ công, có thể chuyển mã cũ sang ngôn ngữ mới, v.v.), * thì * đó là khi điều này thực sự hữu ích, vì nó sẽ duy trì cùng một bản sắc. – Panzercrisis

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