स्थितिवैकल्पिक typedef या सी # में उपवर्गीकरण स्ट्रिंग के लिए
मैं कक्षा कि फ़ाइल पथ के विभिन्न प्रकार के साथ आंतरिक रूप से सौदों है: कुछ स्थानीय, कुछ सुदूर; कुछ रिश्तेदार, कुछ पूर्ण।
यह ऐसा मामला होता था कि इसकी कई विधियां उन्हें string
एस के रूप में एक-दूसरे के पास पास करती हैं, लेकिन प्रत्येक विधि की अपेक्षा किस प्रकार की पथ की अपेक्षा रखने के लिए यह बहुत मुश्किल हो गया।
वांछित ठीक
तो हम अनिवार्य रूप से string
को typedef
चार अलग अलग प्रकार करना चाहता था: RemoteRelative
, LocalRelative
, RemoteAbsolute
, और LocalAbsolute
। इस प्रकार स्थिर प्रकार परीक्षक डेवलपर्स को यह सुनिश्चित करने में सहायता कर सकता है कि वे सही अर्थशास्त्र के साथ string
एस प्रदान कर रहे हैं और उम्मीद कर रहे हैं।
दुर्भाग्यवश, string
बीसीएल में sealed
है, इसलिए हम इसे सरल विरासत के साथ नहीं कर सके। और कोई आसान typedef
नहीं है, इसलिए हम इसे इस तरह से नहीं कर सके।
वास्तविक ठीक
मैं चार अलग अलग वर्गों सरल है कि प्रत्येक एक readonly string
शामिल बना दी।
public struct LocalAbsolutePath {
public readonly string path;
public LocalAbsolutePath(string path) {
this.path = path;
}
}
जो अधिकतर काम करता है, लेकिन यह अवांछित वर्बोजिटी का थोड़ा सा जोड़ता है।
प्रश्न: क्या मैं स्वाभाविक रूप से सरल सी # वाक्यविन्यास में फिट होने वाले किसी भी विकल्प को देख रहा हूं?
जैसा मैंने ऊपर बताया है, एक सी-शैली typedef string LocalAbsolutePath;
या यहां तक कि एक एफ # -स्टाइल type LocalAbsolutePath = string
मेरा सपना होगा। लेकिन यहां तक कि कुछ ऐसा कदम है जो कस्टम वर्गों से दिशा बहुत अच्छा होगा।
नहीं है कि यह एक आम पैटर्न से मेल खाते रास्ता खोजने के लिए संभव है:
यहाँ कैसे प्रकार व्यवहार करेंगे है? उदाहरण: यदि पथ पूर्ण है, तो इसके सामने कुछ ड्राइव अक्षर होना चाहिए, यदि नहीं, तो यह * नेटवर्क पथ के लिए सापेक्ष होना चाहिए ... – Tigran
@ टिग्रान, बिल्कुल हां, लेकिन यह पहली बार समस्या थी जगह। मैं _compiler_ को यह बताने में सक्षम होना चाहता हूं कि क्या हम सही प्रकार के आसपास गुजर रहे हैं, रनटाइम नहीं। – sblom
असल में मेरा कोड और @ dasblinkenlight एक साथ ले लो और आपके पास एक कक्षा है। :) –