2017-05-25 15 views
5

Tôi có giao diện sau:Tính toán tham chiếu vẫn hoạt động với Giao diện Delphi khi bạn không cung cấp một guid?

type IDataAccessObject<Pk; T:class> = interface 
    getByPrimaryKey(key: PK) : T; 
    //... more methods 
end; 

Và một thực hiện của giao diện như sau:

type TMyClassDAO = class(TInterfacedObject, IDataAccessObject<integer, TMyClass>) 
    getByPrimaryKey(key:integer) : TMyClass; 
    // more methods 
end; 

Lưu ý rằng tôi không cung cấp một guid cho giao diện (vì mỗi instantiation của giao diện chung trước đó là một giao diện khác và họ không nên chia sẻ cùng một guid). Tuy nhiên, tôi không chắc liệu điều đó có làm gián đoạn việc tính toán tham chiếu được thực hiện bởi TInterfacedObject không?

+1

Xem thêm [GUID là cần thiết để sử dụng giao diện trong Delphi?] (Https://stackoverflow.com/q/2992183/576719). –

Trả lời

15

Tính tham chiếu không dựa trên GUID, nhưng trên _AddRef()_Release() triển khai phương pháp.

Vì bạn kế thừa từ TInterfacedObject, tính năng tham chiếu sẽ hoạt động cho tất cả các phiên bản đối tượng của bạn.

Điều duy nhất bạn bị mất nếu bạn không cung cấp một GUID là khả năng truy vấn một giao diện từ khác, chẳng hạn như trong các cuộc gọi đến Supports() chức năng, QueryInterface() phương pháp giao diện, và isas nhà khai thác.

+0

Cảm ơn bạn đã giải thích! – BigONotation

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