2010-08-08 8 views
7

मैं अपने दिमाग को तोड़ने के लिए तोड़ रहा हूं कि यह सी # में कैसे किया जाए। मेरे पास एक टेक्स्टग्रिड क्लास है, जो अनिवार्य रूप से टेक्स्ट का एमएक्सएन ग्रिड है। मैं एक कर्सर क्लास रखना चाहता हूं जो टेक्स्टग्रिड में एक (एक्स, वाई) स्थिति बनाए रखता है, साथ ही साथ स्थिति को स्थानांतरित करने, मौजूदा स्थिति की पूछताछ आदि के तरीकों को बनाए रखता है। आदर्श रूप से, मैं इस वर्ग के लिए नहीं होना चाहता टेक्स्टग्रिड के बाहर रचनात्मक, क्योंकि यह टेक्स्टग्रिड से तार्किक रूप से संलग्न किए बिना बेकार है।मैं कक्षा को केवल किसी अन्य वर्ग के भीतर रचनात्मक बनाने के लिए कैसे प्रतिबंधित कर सकता हूं?

हालांकि, इसका सामना करने के लिए मेरे दृष्टिकोण बराबर नहीं हैं: मैंने 1) होने का प्रयास किया है। कर्सर एक निजी कन्स्ट्रक्टर के साथ टेक्स्टग्रिड के अंदर एक सार्वजनिक वर्ग है, 2) कर्सर टेक्स्टग्रिड के अंदर घोंसला एक निजी वर्ग है सार्वजनिक कन्स्ट्रक्टर, और 3) कर्सर एक सार्वजनिक कन्स्ट्रक्टर के साथ टेक्स्टग्रिड के बाहर अपनी अलग सार्वजनिक कक्षा हो। # 1 काम नहीं करता है क्योंकि मैं निजी निर्माता के कारण टेक्स्टग्रिड के भीतर से कर्सर को तुरंत चालू नहीं कर पा रहा हूं। # 2 काम नहीं करता है क्योंकि मैं एक्सेस प्रतिबंधों के कारण TextGrid (उदा। GetCursor() विधि) के बाहर बनाए गए कर्सर ऑब्जेक्ट को वापस नहीं कर सकता। और # 3 बिल्कुल मदद नहीं करता है।

बहुत कुछ, मैं जो करना चाहता हूं उसके पास सी # में जावा के इटरेटर के बराबर है। क्या यह संभव है?

उत्तर

7

# 2 का प्रयोग करें, लेकिन इंटरफ़ेस द्वारा इसे वापस: एक अंतरफलक का उपयोग करते समय हल करने के लिए समस्या के लिए एक अच्छा तरीका है

public interface ICursor 
{ 

} 

public class TextGrid 
{ 
    private class Cursor : ICursor 
    { 
    } 

    // This could be a property if it doesn't require much calculation. 
    public ICursor GetCursor() 
    { 
    } 
} 
+0

इस खूबसूरती से काम किया, हालांकि मैं कुछ वर्ग rewiring, haha ​​करना था। धन्यवाद! –

1

, अगर आप सिर्फ एक उदाहरण के साथ जुड़े Cursor वर्ग के प्रत्येक उदाहरण करना चाहते हैं TextGrid वर्ग के लिए, आप बस जैसे निर्माता के प्रकार TextGrid का एक तर्क पारित करने के लिए निर्माता की आवश्यकता होती है सकते हैं:

public class Cursor 
{ 
    public Cursor(TextGrid owner) 
    { 
     ... 
    } 
} 
संबंधित मुद्दे

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