2010-01-14 16 views
10

सी # को उत्तराधिकारी तक कक्षा को तुरंत चालू करने का सबसे आसान तरीका क्या है?सी # को उत्तराधिकारी होने तक कक्षा को तुरंत चालू करने का सबसे आसान तरीका नहीं है?

अजीब लगता है लेकिन मैं क्यों समझाऊंगा कि क्यों नहीं। मेरे पास एक बेस क्लास और दो वर्ग है जो इसे प्राप्त करता है। मैं व्युत्पन्न कक्षा का उपयोग केवल आधार पर नहीं करना चाहता हूं। व्युत्पन्न वर्ग में कोई अतिरिक्त कार्य नहीं है। मुझे नया बेस क्लास() लिखने की अनुमति देने का सबसे आसान तरीका क्या है; तो मैं गलती से इसका उपयोग नहीं करता? मेरे पास ऐसे कार्य हैं जो बेस क्लास पर काम करते हैं और व्युत्पन्न नहीं होते हैं।

+5

के लिए एक संरक्षित कन्स्ट्रक्टर का उपयोग करें, मुझे ऐसे प्रश्न पसंद हैं जहां कोई व्यक्ति पत्र में मौजूदा सुविधा का वर्णन करता है (इस मामले में सार कक्षाएं)। वे ऐसे स्पष्ट उत्तरों के साथ ऐसे साफ और साफ प्रश्न हैं, वे मुझे बहुत संतुष्ट करते हैं। – KingNestor

+0

हाहा किंगनेस्टर –

+0

किसी ने मुझे भी नीचे गिरा दिया। अजीब। –

उत्तर

43

कक्षा को abstract आधार श्रेणी बनाएं।

abstract class Person { } 

class Programmer : Person { } 

var person = new Person();   // compile time error 
var programmer = new Programmer(); // ok 
+3

आप इसे तत्काल करने की कोशिश करते समय इंटेलिजेंस सूची पर कक्षा का नाम भी नहीं देख सकते हैं जो जागरूकता के लिए कमाल है :) – Tarik

+1

+1 @ डॉकर्स (15char) –

5

आधार वर्ग सार हो सकता है? वह ऐसा करेगा।

5
सामान्य के बजाय

:

"public Class MyClass"

यह

01 बनाने
1

BaseClass के निर्माता संरक्षित करें:

public class BaseClass { 

    protected BaseClass() 
    { 
     // DO SOMETHING 
    } 

} 


public class Derived : BaseClass { 

    public Derived() {} 
} 
+1

केवल तभी जब वह कुछ अजीब कारणों के लिए बेस क्लास सार नहीं बना सकता । –

+0

मैं यह नहीं करूँगा। – Finglas

+0

ऊपर बेहतर समाधान हैं। – David

1

जिस तरह से आप अपनी जरूरत का वर्णन है, जिससे अपनी कक्षा abstract जाने का रास्ता है। यह आपको बेस क्लास को तुरंत चालू करने से रोक देगा और आपको पर फ़ंक्शंस को कॉल करने की अनुमति देगा। यह आपको कार्यों और गुणों को सार के रूप में चिह्नित करने की अनुमति देगा और विरासत कक्षाओं को लागू करने के लिए मजबूर करेगा।

यदि आपको कोड साझा करने की आवश्यकता नहीं है, तो एक इंटरफ़ेस एक अच्छा विकल्प होगा। यह आपको को एबस्टारक्ट क्लास के समान तरीके से कार्यान्वित करने और इसमें कार्यान्वयन कास्टिंग करने की अनुमति देता है।

आशा है कि यह कुछ मूल्य जोड़ता है।

0

बेस क्लास

+1

यह एक वैध समाधान नहीं है ... सार सही तरीका है। – David

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

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