2012-09-20 10 views
9

सी # में मैं बेस क्लास को base कीवर्ड तक एक्सेस कर सकता हूं, और जावा में मैं इसे super कीवर्ड तक एक्सेस कर सकता हूं। डेल्फी में ऐसा कैसे करें? आप एक stackoveflow अपवाद हो रही है क्योंकि लाइनडेल्फी में आधार (सुपर) कक्षा का उपयोग कैसे करें?

Self.Caption := Value; 

पुनरावर्ती है

type 
    TForm3 = class(TForm) 
    private 
    procedure _setCaption(Value:String); 
    public 
    property Caption:string write _setCaption; //adding override here gives error 
    end; 

    implementation 


procedure TForm3._setCaption(Value: String); 
begin 
    Self.Caption := Value; //it gives stack overflow  
end; 

उत्तर

12

: लगता है मैं कोड निम्नलिखित है।

आप मूल प्रॉपर्टी Caption तो जैसे आधार वर्ग के लिए Self संपत्ति कास्टिंग पहुँच सकते हैं:

procedure TForm3._setCaption(const Value: string); 
begin 
    TForm(Self).Caption := Value; 
end; 

या inherited कीवर्ड

procedure TForm3._setCaption(const Value: string); 
begin 
    inherited Caption := Value; 
end; 
10

का उपयोग कर आप inherited कीवर्ड का उपयोग करना चाहिए:

procedure TForm3._setCaption(Value: String); 
begin 
    inherited Caption := Value; 
end; 
2

आधार (सी #) = सुपर (जावा) = विरासत (ऑब्जेक्ट पास्कल) (*)

3 कीवर्ड उसी तरह काम करते हैं।

1) कॉल आधार वर्ग निर्माता
2) कॉल आधार वर्ग तरीकों
3) आधार वर्ग गुण के मान निर्दिष्ट करें (मान वे निजी, केवल सुरक्षित है और सार्वजनिक अनुमति दी जाती है) नहीं हैं
4) कॉल आधार वर्ग नाशक (पास्कल वस्तु केवल। सी # और जावा विनाशकर्ता नहीं है)


(*) ऑब्जेक्ट पास्कल डेल्फी या मुफ्त पास्कल के बजाय बेहतर है क्योंकि वस्तु पास्कल एक कार्यक्रम भाषा, जबकि डेल्फी और नि: शुल्क का नाम है पास्कल कंपाइलर्स हैं ऑब्जेक्ट पास्कल का।

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