2010-04-08 17 views
32

से अमूर्त वर्ग प्राप्त करें क्या यह एक गैर-सारणी वर्ग से एक अमूर्त वर्ग प्राप्त करना ठीक है या क्या इस दृष्टिकोण में कुछ गड़बड़ है?गैर-अमूर्त वर्ग

Here's एक छोटे से उदाहरण:

public class Task { 
    // Some Members 
} 

public abstract class PeriodicalTask : Task { 
    // Represents a base class for task that has to be done periodicaly. 
    // Some additional Members 
} 

public class DailyTask : PeriodicalTask { 
    // Represents a Task that has to be done daily. 
    // Some additional Members 
} 

public class WeeklyTask : PeriodicalTask { 
    // Represents a Task that has to be done weekly. 
    // Some additional Members 
} 

उपरोक्त उदाहरण मैं कक्षा टास्क सार बनाने के लिए, क्योंकि मैं इसे सीधे का दृष्टांत करना चाहते हैं नहीं करना चाहती हैं। आवधिक कार्य को कार्य से कार्यक्षमता का उत्तराधिकारी होना चाहिए और कुछ अतिरिक्त सदस्यों को जोड़ना चाहिए, लेकिन मैं इसे तुरंत चालू नहीं करना चाहता हूं। आवधिक टास्क का केवल व्युत्पन्न वर्ग तत्काल होना चाहिए।

उत्तर

49

मुझे इस दृष्टिकोण के साथ कुछ भी गलत नहीं दिख रहा है।

आपके पास कुछ बुनियादी प्रकार हो सकते हैं जिन्हें ठोस शब्दों में वर्णित किया जा सकता है। अब, सिर्फ इसलिए कि इस प्रकार के किसी ऑब्जेक्ट को कुछ उप प्रकार के अनुसार वर्गीकृत किया जा सकता है, यह इस बात का पालन नहीं करता है कि इस तरह के सभी उपप्रकार ठोस हैं; बदले में वे आगे बढ़ने की आवश्यकता हो सकती है, जैसा कि यह था।

वास्तविक दुनिया उदाहरण:

Person - ठोस (गैर सार)
Sibling: Person - सार
Brother: Sibling - ठोस
Sister: Sibling - ठोस

+2

परफेक्ट उदाहरण कैसे काम करते हैं –

+0

अच्छा उदाहरण इसलिए स्वीकृत – Jehof

+0

वाह! वास्तव में, अच्छा उदाहरण। – ManuelSchneid3r

0

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

+0

क्या आप विस्तृत कर सकते हैं? हां, संरक्षित/आंतरिक कन्स्ट्रक्टर निर्देशित होने से 'आवधिक टास्क' के उदाहरणों को रोक सकता है। लेकिन इसे कार्यान्वयन के लिए 'कार्य' से कुछ अमूर्त विधियों/गुणों की भी आवश्यकता होगी। –

+0

कोई बात नहीं ... मुझे याद आया कि कार्य अमूर्त नहीं था। दोनों दृष्टिकोण इस स्थिति में उतना ही अच्छा काम करेंगे। अन्य तो आप किसी व्युत्पन्न वर्ग में किसी विधि को लागू करने के लिए मजबूर नहीं कर सकते। –

+0

@kprobst: हाँ मैं इसे कर सकता हूं, लेकिन फिर मैं अमूर्त सदस्यों को परिभाषित करने की संभावना खो देता हूं, जिन्हें व्युत्पन्न प्रकारों द्वारा कार्यान्वित किया जाना है। वर्चुअल सदस्य कोई विकल्प नहीं हैं, क्योंकि व्युत्पन्न प्रकारों को परिभाषित करना चाहिए कि वे – Jehof

17

इसके साथ कुछ भी गलत नहीं है।

यदि आप WinForms जैसे बड़े पदानुक्रम को देखते हैं, तो आपको अमूर्त प्रकारों की कई परतें मिलेंगी।

एमएसबिल्ड कार्य भी एक अच्छा (और अधिक प्रासंगिक) उदाहरण हैं।

12

इस तरह का टी हिंग हर समय होता है: सभी अमूर्त वर्ग System.Object से प्राप्त होते हैं, एक वर्ग जो abstract स्वयं ही नहीं है।

new System.Object() कभी-कभी लॉकिंग के लिए उपयोगी होता है, अगर आपके पास कुछ और नहीं है, तो आप लॉक कर सकते हैं।

+0

यह एक अच्छा मुद्दा है। इस तथ्य को मैं याद किया, सिस्टम से विरासत का कारण बनता है। ऑब्जेक्ट स्पष्ट नहीं किया जाना चाहिए। – Jehof

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