2011-11-22 21 views
6

मैं इस तरह कुछ करने के लिए कोशिश कर रहा हूँ:मैं कैसे बता सकता हूं कि एक टी क्लास दूसरे से लिया गया है या नहीं?

function CreateIfForm (const nClass : TClass) : TForm; 
begin 
    if not (nClass is TFormClass) then 
    raise Exception.Create('Not a form class'); 
    Result := (nClass as TFormClass).Create(Application); 
end; 

यह त्रुटि पैदा करता है "ऑपरेटर इस संकार्य प्रकार के लिए लागू नहीं"। मैं तुम्हें केवल एक फार्म वर्ग स्वीकार करने के लिए समारोह को बदल सकते हैं अगर आप की जाँच करनी चाहिए डेल्फी 7.

+0

जवाब ;-) – TLama

उत्तर

17

सबसे पहले उपयोग कर रहा हूँ:

function CreateIfForm(const nClass: TFormClass): TForm; 

और प्रकार की जाँच और कास्टिंग के लिए की जरूरत को बायपास।

यदि यह posssible नहीं है, आप InheritsFrom उपयोग कर सकते हैं:

function CreateIfForm(const nClass: TClass): TForm; 
begin 
    if not nClass.InheritsFrom(TForm) then 
    raise Exception.Create('Not a form class'); 
    Result := TFormClass(nClass).Create(Application); 
end; 
+0

InheritsFrom स्वीकार करने के लिए मत भूलना! हां, यह वही है जो मैं ढूंढ रहा हूं। धन्यवाद –

+0

@Ulrich - आपका दूसरा जवाब वास्तव में सही है: फ़ंक्शन को उस वर्ग को कभी भी स्वीकार नहीं करना चाहिए जो एक रूप नहीं है। –

+0

@ निक, बिल्कुल सही है। मैंने इसे बेहतर ढंग से प्रतिबिंबित करने के लिए अपने उत्तर को दोहराया। –

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

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