2009-05-25 8 views
12

करने के लिए सेटिंग मैं डेल्फी 2009 मेंइंटरफेस - शून्य

interface 
... 
    TFoo<T : IInterface> = class(TObject) 
    FField : T; 
    procedure Clear; 
    end; 
... 
implementation 
... 
procedure TFoo<T>.Clear; 
begin 
    // Line Below Results In 
    // E2010 Incompatible types: 'T' and 'Pointer' 
    FField := nil; 
end; 
... 

निम्न उदाहरण कोड में स्पष्ट लागू करने के लिए मैं complie टाइम त्रुटि समझ सकते हैं अगर "टी" विवश नहीं कर रहा था कोशिश कर रहा हूँ। लेकिन चूंकि "टी" एक इंटरफ़ेस होना चाहिए, इसलिए मैंने सोचा होगा कि इस वाक्यविन्यास में काम करेगा।

क्या एफआईएफआईल्ड को शून्य में सेट करने के लिए दूर है, तो इंटरफ़ेस जारी किया जा सकता है?

उत्तर

19

nil के बजाय आपको नए Default(T) का उपयोग करना होगा जो सामान्य पैरामीटर प्रकार के लिए डिफ़ॉल्ट मान देता है। और इंटरफेस के लिए यह nil

procedure TFoo<T>.Clear; 
begin 
    FField := Default(T); 
end; 
+0

जेनिक्स में डी 200 9 में बहुत सी समस्याएं हैं। जब भी यह आता है, उनमें से अधिकतर अगले अपडेट में हल किए जाने चाहिए। ऐसा लगता है कि यह उनमें से एक है। इसे क्यूसी को रिपोर्ट करने का प्रयास करें, और तब तक, यह समाधान शायद आपका सबसे अच्छा कामकाज है। –

+1

यह देखकर आश्चर्यचकित हुआ कि संदर्भ गणना कोड भी उत्सर्जित किया गया था। –

+0

@RyanVanIderstine मुझे उम्मीद है! एक अच्छा पुराना एफएफआईल्ड: - नील इसे भी छोड़ देगा। ध्यान दें कि समस्या अभी भी डी 2010 में है, जो डीएक्सई 2 + में तय है (मेरे पास हाथ में डीएक्सई नहीं है)। –

संबंधित मुद्दे