2016-06-21 8 views
14

मेरे पास मूल सार Goods वर्ग है और विरासत Book कक्षा है।सार वर्ग फ़ील्ड रिडंडेंसी सी #

abstract class Goods 
{ 
    public decimal weight; 
    string Title, BarCode; 
    double Price; 
    public Goods(string title, string barCode, double price) 
    { 
     Title = title; 
     BarCode = barCode; 
     Price = price; 
    } 
} 

abstract class Book : Goods 
{ 
    protected int NumPages; 
    public Book(string title, string barCode, double price, int numPages) 
     : base(title, barCode, price) 
    { 
     NumPages = numPages; 
     weight = 1; 
    } 
    public override void display() 
    { 
     base.display(); 
     Console.WriteLine("Page Numbers:{0}", NumPages); 
    } 

} 

मैं लिखने चाहिए title, barCode, price कि दो बार Goods कक्षा में मौजूद हैं? क्या मैं इस

public Book(string title, string barCode, double price, int numPages) 
     : base(title, barCode, price) 

को कम अनावश्यक निर्माण के साथ प्रतिस्थापित कर सकता हूं?

+8

बस एक नोट। आपके पास ** फ़ील्ड ** है और ** ** गुण ** नहीं हैं। गुणों को 'get' और/या' set' होना चाहिए। –

+6

कीमतों का प्रतिनिधित्व करने के लिए कृपया 'डबल' के बजाय' दशमलव' (या पूर्णांक) का उपयोग करें। – CodesInChaos

+4

मैं एक इंटरफ़ेस द्वारा अमूर्त वर्ग को बदलने पर विचार करता हूं। – CodesInChaos

उत्तर

17

नहीं, यह कोड अनावश्यक नहीं है। आपको Book कन्स्ट्रक्टर और base कन्स्ट्रक्टर दोनों के मानों को पास करना होगा।

मुझे लगता है कि आप Book कन्स्ट्रक्टर में weight असाइन करते हैं। यदि आप चाहते हैं, तो आप अन्य Title, BarCode और Price के लिए भी ऐसा ही कर सकते हैं। फिर आपका Goods कन्स्ट्रक्टर खाली होगा। लेकिन इसका मतलब यह होता है कि Goods में से प्रत्येक के कार्यान्वयन यह (जो एक बुरी बात हो सकता है अगर वहाँ अधिक तर्क तो सरल असाइन है) करने के लिए होता है ..

+0

समझा नहीं गया। – ifooi

+8

आपका कोड अनावश्यक नहीं है और आप अपने कन्स्ट्रक्टर को कम नहीं कर सकते हैं। इस तरह सी # सिंटैक्स दिखता है। –

+0

ठीक है, धन्यवाद, मैं और जानूंगा। गेटर/सेटर के साथ उदाहरण। – ifooi

2

मैं शीर्षक लिखना चाहिए, बारकोड, कीमत में मौजूद है कि माल वर्ग दो बार? क्या मैं इसे कम अनावश्यक निर्माण के साथ बदल सकता हूं?

कोई इस कोड में "अनावश्यकता" है।

यह आपके कन्स्ट्रक्टर [विधि] की घोषणा है, जो तर्क लेता है उसे निर्दिष्ट करता है।

public Book(string title, string barCode, double price, int numPages) 

इस आधार वर्ग 'निर्माता के आह्वान, तर्क इस निर्माता के लिए पारित गुजर रहा है।

: base(title, barCode, price) 

इसका कारण यह है अपने आधार वर्ग केवल प्रदान की निर्माता है कि तीन तर्क लेता है का उपयोग कर निर्माण किया जा सकता है बिल्कुल जरूरी है। आप , इन तर्क प्रदान करने के लिए या तो तर्क यह निर्माता को पारित कर दिया या, संभवतः से के रूप में में

: base(title, barCode, priceDerivedFrom(title, barCode)) 

(सुनिश्चित नहीं हैं कि इस तरह के एक समारोह समारोह काम करेगा लेकिन हमें उम्मीद है कि आप देख उन्हें पाने से, है मेरी बिंदु)।

+0

धन्यवाद। Invocaton। मैं एक और जवाब में समझ गया लेकिन धन्यवाद! शब्द आविष्कार – ifooi

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