घोषित नहीं कर सकते हैं मेरे पास एक एपीआई में एक सारणी वर्ग है जिसका उपयोग किसी अन्य असेंबली में तरीकों से किया जाता है।इंटरफेस
abstract public class Thing
{
public enum Status { Accepted, Denied, Pending };
abstract public Status status { get; private set; }
etc...
}
मैं तो फैसला किया कि यह एक बेहतर डिजाइन हो सकता है अगर बात एक अंतरफलक था: कक्षा एक नेस्टेड enum इस तरह एक सा है, यह अंदर परिभाषित है। लेकिन मैं यह नहीं कर सकता:
public interface Thing
{
enum Status { Accepted, Denied, Pending };
Status status { get; }
etc...
}
यह त्रुटि संदेश उत्पन्न करता है "इंटरफेस प्रकार घोषित नहीं कर सकता।" हालांकि, अगर मैं इंटरफ़ेस के बाहर enum की परिभाषा को स्थानांतरित करता हूं, तो सबसे पहले मैं encapsulation तोड़ना होगा (स्थिति प्रकार वास्तव में चीज से संबंधित है और अपने आप पर अर्थहीन है) और सबसे महत्वपूर्ण बात यह है कि मुझे कोड जाना और संशोधित करना होगा इसका उपयोग करने वाली कई अन्य असेंबली। क्या आप किसी भी समाधान के बारे में सोच सकते हैं?
आप के बारे में * तोड़ने * कैप्सूलीकरण (आप द्वारा defintion इंटरफेस में डेटा सदस्यों कैप्सूलीकरण नहीं कर सकता) चिंतित है, तो आप एक वर्ग के रूप 'Thing' छोड़ देना चाहिए है। आपके सार आधार वर्ग में कुछ भी गलत नहीं है। –
कुछ अन्य स्थानों को मिला जहां यह सवाल पूछा गया था, इस पर इस टिप्पणी के कुछ अच्छे विकल्प हैं। http://social.msdn.microsoft.com/forums/en-US/csharpgeneral/thread/14beb8d1-63d9-42f7-b036-eb9ebb106d08 मूल रूप से, आप या तो कहीं और enum घोषित कर सकते हैं, या इसके बजाय कक्षा का उपयोग कर सकते हैं एक इंटरफ़ेस .... और यह इसके बारे में है। आप जो करने की कोशिश कर रहे हैं, वही करने का कोई तरीका नहीं है, करुणा को दूर करता है। – Nevyn
"encapsulation" तर्क मेरे साथ तर्क नहीं करता है और मैं आपको सलाह देता हूं कि आप सार्वजनिक नेस्टेड प्रकार से छुटकारा पाएं। अगर इसे दुनिया के सामने उजागर किया जा सकता है, तो इसका इलाज करें। –