2015-06-07 14 views
40

सरल कोड:विरासत

class foo 
{ 
    private int a; 
    private int b; 

    public foo(int x, int y) 
    { 
     a = x; 
     b = y; 
    } 
} 

class bar : foo 
{ 
    private int c; 
    public bar(int a, int b) 
    { 
     c = a * b; 
    } 
} 

दृश्य स्टूडियो "बार" निर्माता के बारे में शिकायत:

त्रुटि CS7036 नहीं दिया तर्क यह है कि आवश्यक औपचारिक पैरामीटर से मेल खाती है है 'x' 'foo.foo (int, int)'।

क्या ??

उत्तर

78

समस्या यह है कि बेस क्लास foo में कोई पैरामीटर रहित कन्स्ट्रक्टर नहीं है। तो तुम व्युत्पन्न वर्ग के निर्माता से मानकों के साथ आधार वर्ग के निर्माता कॉल करना होगा:

public bar(int a, int b) 
    : base(a, b) 
{ 
    c = a * b; 
} 
17

मैं गलत हो सकता है, लेकिन मैं जब से तुम foo से इनहेरिट रहे हैं, आप एक आधार निर्माता कॉल करनी होगी विश्वास करते हैं। चूंकि आपने स्पष्ट रूप से फू कन्स्ट्रक्टर को परिभाषित करने के लिए परिभाषित किया है (int, int) अब आपको श्रृंखला को पारित करने की आवश्यकता है।

public bar(int a, int b) : base(a, b) 
{ 
    c = a * b; 
} 

यह पहले foo के चर शुरू करेगा और फिर आप उन्हें बार में उपयोग कर सकते हैं। इसके अलावा, भ्रम से बचने के लिए मैं पैरामीटर को नामकरण चर के समान सटीक नाम देने की अनुशंसा करता हूं। इसके बजाय p_a या कुछ कोशिश करें, इसलिए आप गलती से गलत चर को संभालने नहीं देंगे।

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