2012-10-12 31 views
5

संभव डुप्लिकेट:
c# internal abstract class, how to hide usage outside assemblyआंतरिक कीवर्ड का उपयोग कर कक्षा को कैसे छुपाएं?

मैं कई सार वर्गों है कि एक आम सभा/परियोजना है। जब मैं एक नई असेंबली बनाता हूं, तो डेवलपर को MathProblem और MathProblemTemplate<T> कक्षाओं से प्राप्त करना चाहिए।

तो, मैं के लिए MathProblemTemplate<T>

// Question classes 
public abstract class Question 
{ 
    protected QuestionTemplate Template { get; private set; } 

    public Question(QuestionTemplate template) 
    { 
     this.Template = template; 
    } 
} 

public abstract class MathProblem : Question 
{ 
    public MathProblem(MathProblemTemplate template) 
     : base(template) 
    { 
    } 
} 

// QuestionTemplate classes 
public abstract class QuestionTemplate 
{ 
    public QuestionTemplate() { } 
} 

// This is the class which I'd like to hide 
public abstract class MathProblemTemplate : QuestionTemplate 
{ 
} 

public abstract class MathProblemTemplate<T> : MathProblemTemplate 
{ 
    protected abstract T Method1(); 
    protected abstract T Method2(); 
} 

है लगता है कि वर्ग MathProblemTemplateinternal हो सकता है, मेरा मतलब है जब आप एक ठोस वर्ग के लिए एक आधार वर्ग सेट नहीं IntelliSense में वर्ग MathProblemTemplate दिखाने की योजना है, लेकिन हाँ यह संभव है?

+0

आप पढ़ सकते हैं [इस प्रासंगिक सवाल] (http://stackoverflow.com/questions/1244953/c-sharp-internal-abstract-class यह किसी भी कोड को स्थानांतरित कर सकता है -how-to-hide-use-out-assembly) जो आपके प्रश्न पूछने पर सूची में दिखाई देता है? –

+0

हां, मैंने इसे पढ़ लिया है, लेकिन मुझे अभी भी त्रुटियां मिल रही हैं: असंगत पहुंच: बेस क्लास 'DevNinja.Core.Models.MathProblemTemplate' कक्षा से कम पहुंच योग्य है 'DevNinja.Core.Models.MathProblemTemplate ' –

+0

हम्म, हाँ, आप टेम्पलेट्स का उपयोग कर रहे हैं जो इसे अलग बनाता है। –

उत्तर

3

आप नहीं कर सकते हैं, कारण यह है कि MathProblemTemplate<T> सार्वजनिक है, इसलिए किसी भी वर्ग को इसे प्राप्त करने के लिए भी सार्वजनिक होना आवश्यक है।

तुम बस MathProblemTemplate हटाने और में MathProblemTemplate<T>

+0

लेकिन मुझे मैथप्रोबलेम कन्स्ट्रक्टर में इसके संदर्भ की आवश्यकता है, यही कारण है कि मुझे वास्तव में जेनेरिक –

+0

की आवश्यकता है, उस स्थिति में, आपको MathProblem जेनेरिक बनाना होगा और फिर जेनेरिक MathProblemTemplate उदा। 'सार्वजनिक अमूर्त वर्ग MathProblem : प्रश्न {सार्वजनिक MathProblem (MathProblemTemplate टेम्पलेट) {}} ' –

+0

लेकिन अनावश्यक होगा क्योंकि यह एक MathProblemTemplate होना चाहिए। क्या आपको ऐसा नहीं लगता? –