2015-08-31 10 views
5

में मौजूद नहीं है बनाएँ मैं एक वर्ग को उम्मीद है कि एक IWorkspace बनाया जाना है। इस व्युत्पन्न कक्षा में मेरे पास एक प्रति-नियंत्रक है जो MyClass के उदाहरण के आधार पर Derived का उदाहरण बनाना चाहिए।एक निर्माता है कि आधार वर्ग

public class Derived : MyClass{ 
    public Derived(MyClass m) : base(m.workspace) { } 
} 

ऊपर नहीं होगा निम्न त्रुटि के साथ संकलन:

Cannot access protected member MyClass.workspace' via a qualifier of type 'MyClass'; the qualifier must be of type 'Derived' (or derived from it)

तो क्या मैं प्राप्त व्युत्पन्न एक के लिए आधार class' सदस्यों को कॉपी किया जाता है और एक नया उदाहरण में बनाने का प्रयास कर बाद के। मेरी व्युत्पन्न कक्षा में IWorkspace के लिए मैं कन्स्ट्रक्टर का उपयोग क्यों नहीं करता हूं, यह है कि मेरे पास क्लाइंट-कोड के भीतर ऐसे वर्कस्पेस तक पहुंच नहीं है, केवल प्रतिलिपि बनाने के लिए MyClass के उदाहरण के लिए।

public class MyClassWrapper 
{ 
    private readonly MyClass myClass; 
    public MyClassWrapper(MyClass myClass) 
    { 
     this.myClass = myClass; 
    } 

    // Wrap any methods you depend on here 
} 

:

+0

क्या 'MyClass' का डिफॉल्ट कन्स्ट्रक्टर है? –

+0

आपके नेमस्पेस के आधार पर आपको MyClass - public, internal, आदि के सामने एक एक्सेस संशोधक की आवश्यकता है .... –

+0

@YuvalItzchakov नहीं, दुर्भाग्य से – HimBromBeere

उत्तर

1

है जब से तुम MyClass स्रोत और IWorkspace के लिए उपयोग उपलब्ध नहीं है नहीं, सबसे अच्छी बात आप कर सकते हैं के बजाय MyClass संपुटित यह निकाले जाते हैं, और कोई है बाह्य निर्भरता प्रदान करना है यदि धक्का ढकने के लिए आता है और आपके पास कोई विकल्प नहीं है, तो आप शायद Workspace उदाहरण MyClass से प्राप्त करने के लिए प्रतिबिंब का उपयोग कर सकते हैं, लेकिन यह एक बदसूरत हैक होगा।

+1

आप सही हैं, मुझे केवल इस कार्यक्षेत्र की आवश्यकता नहीं है, केवल सृजन के लिए। मुझे लगता है कि यह काम कर रहा है, कोशिश कर रहा है। – HimBromBeere

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