मैं निम्नलिखित कोडडेल्फी इंटरफेस जेनेरिक फ़ंक्शन - क्या कोई काम आसपास है?
IProxy<T> = interface
['{1E3A98C5-78BA-4D65-A4BA-B6992B8B4783}']
function Setup : ISetup<T>;
function Proxy : T;
function CastAs<I : IInterface> : IInterface;
end;
वहाँ संकलक त्रुटि है कि जब संकलन प्राप्त होता है के आसपास काम करने के लिए एक रास्ता है है?
"[डीसीसी त्रुटि] Delphi.Mocks.pas (123): E2535 इंटरफ़ेस तरीकों पैरामिट्रीकृत विधि नहीं चाहिए"
मूल रूप सेमैं इस इंटरफेस के आसपास पारित किया जा है और यह त्याग करने में सक्षम होना चाहते हैं, उस प्रकार के प्रकार में लौटने के लिए और उस प्रकार को लौटाकर। मैं इसे कक्षा के साथ प्राप्त कर सकता हूं, हालांकि एक इंटरफेस के चारों ओर गुजरना पसंद करेंगे।
अतिरिक्त जानकारी:
मैं निम्नलिखित वर्ग
TInterfaceProxy<T> = class(TBaseProxy<T>)
private type
TProxyVirtualInterface = class(TVirtualInterface)
private
FProxy : TInterfaceProxy<T>;
protected
public
function QueryInterface(const IID: TGUID; out Obj): HRESULT; override; stdcall;
constructor Create(AProxy : TInterfaceProxy<T>; AInterface: Pointer; InvokeEvent: TVirtualInterfaceInvokeEvent);
end;
private
FVirtualInterfaces : TDictionary<TGUID, TProxyVirtualInterface>;
protected
function InternalQueryInterface(const IID: TGUID; out Obj): HRESULT; stdcall;
function QueryInterface(const IID: TGUID; out Obj): HRESULT; override;
function Proxy : T;override;
function CastAs<I: IInterface> : I;
public
constructor Create;override;
destructor Destroy;override;
end;
CastAs अच्छी तरह से यहाँ के रूप में नव अनुरोध किया डाली एक नया आभासी इंटरफेस बनाया जा सकता है काम करता है कहो। अब अगर मैं इस कक्षा को अपने जुर्माना से गुजरना चाहता हूं। हालांकि अगर मुझे इसे एक इंटरफ़ेस के रूप में आवश्यकता है यानी TInterfaceProxy<T> = class(TBaseProxy<T>, IProxy<T>)
यह समझ में नहीं आता है। इसके साथ सहमत न हों, लेकिन समझें।
इसलिए मैं इस प्रतिबंध के आसपास कैसे हो सकता हूं ताकि मैं एक CastAs फ़ंक्शन को कॉल कर सकूं, किसी प्रकार में (किसी भी इंटरफ़ेस प्रकार से शुरू करने के लिए) पास कर सकूं, और इससे वर्चुअल इंटरफ़ेस तैयार कर सकूं?
धन्यवाद। मान लीजिए मुझे टिलिंग पास करने के लिए जाना होगा, और उसके साथ रहना होगा। क्लास को बाहरी रूप से एक्सपोज़र भी करेगा, लेकिन इंटरफ़ेस रखें "फ़ंक्शन कास्टए (कॉन्स आईआईडी: टीजीएल): IInterface;" अंदर का। इच्छा है कि मैं "आपकी भाषा में प्रोग्राम कर सकता हूं, इसमें नहीं" http://programmers.stackexchange.com/questions/2777/what-are-the-key-points-of-code-complete – Jason
इसके अलावा हाँ ' कार्य CastAs: I; कोड को कॉपी करने पर मेरी गलती। –
Jason