2009-08-19 12 views
5

मैं एक विशेष इंजीनियरिंग अनुप्रयोग के लिए कक्षा पुस्तकालय तैयार करने की कोशिश कर रहा हूं और मैं यह सुनिश्चित करने की कोशिश कर रहा हूं कि मेरी कक्षा & नामस्थान नामकरण सम्मेलन समझ में आता है।सी # नामस्थान और वर्ग/उप-वर्ग नामकरण सम्मेलन जब शीर्ष नामस्थान में बेस क्लास और आंतरिक नामस्थान होते हैं तो उप-वर्ग

namespace Vehicle{ 

    class Wheel{...} //base class for Wheel objects 
    class Engine{...} //base class for Engine objects 
    ... 
    namespace Truck{ 
     class Wheel: Vehicle.Wheel{...} //Truck specific Wheel object 
     class Engine: Vehicle.Engine{...} //Truck specific Engine object 
     ... 
    } 

    namespace Car{ 
     class Wheel: Vehicle.Wheel{...} //Car specific Wheel object 
     class Engine: Vehicle.Engine{...} //Car specific Engine object 
     ... 
    } 
    ... 
} 

कोड तरीके कि इन कक्षाओं के सभी एक ही दायरे के भीतर से संदर्भित किया जा करने की आवश्यकता होगी में इस्तेमाल किया जाता है:

मैं निम्नलिखित स्थिति है। निम्नलिखित स्थिति की संभावना होगी:

... 
Vehicle.Wheel.DoSomething(); 
Vehicle.Truck.Wheel.DoSomething(); 
Vehicle.Car.Wheel.DoSomething(); 
... 

इन परिस्थितियों में, मैं बेहतर रूप में पहली उदाहरण में दिखाया गया और जानकारी पर भरोसा कक्षाएं अधिक विशिष्ट नाम

namespace Car{ 
    class CarWheel: Vehicle.Wheel{...} //Car specific Wheel object 
    ... 
} 

या नामकरण छोड़ दे रही है स्पष्टता के लिए नामस्थान में एन्कोड किया गया है? बाद के दृष्टिकोण के तहत, मुझे लगता है कि मैं कोड में स्पष्टता के लिए अलगाव का उपयोग करना चाहता हूं जो इस पुस्तकालय का उपयोग करता है, corret?

यह है करने के लिए redundent लगता है:

Vehicle.Car.CarWheel 

या

Vehicle.Truck.TruckEngine 

लेकिन मैं यह भी बहुत वर्णनात्मक और विशिष्ट वर्ग के नाम करना चाहते हैं।

दार्शनिक रूप से, मैं जो पूछ रहा हूं वह कक्षा के नाम के हिस्से के रूप में नामस्थान को शामिल करना है या नहीं, यह मानते समय कि कक्षा का नाम वर्णनात्मक है या नहीं।

उत्तर

17

आमतौर नामस्थान, बहुवचन जाता है कि उनको वर्ग के नाम के साथ न टकराए (जैसे तो संभव है कि Vehicle और Car नामित वर्गों चाहेगा है) तो मैं इस प्रकार नामस्थान उपयोग करने के लिए इच्छुक होगी:

namespace Vehicles; 
namespace Vehicles.Cars; 
namespace Vehicles.Trucks; 

कक्षाओं के नाम का सवाल है, यह विशेषज्ञता के साथ वर्ग के नाम उपसर्ग के लिए, खासकर अगर वे एक साथ इस्तेमाल किया जाने की संभावना है ठेठ हो सकता है, तो आप की तरह कुछ को रखना होगा:

class CarWheel : Wheel 
class TruckWheel : Wheel 

आप देख सकते हैं इस प्रकार ओ एनईटी फ्रेमवर्क में हर जगह एफ 'रिडंडेंसी', उदाहरण के लिए System.Xml नेमस्पेस में लगभग सभी वर्ग Xml के साथ प्रीफ़िक्स किए गए हैं, या System.Data.SqlClient नेमस्पेस में अधिकांश कक्षा Sql के साथ प्रीफ़िक्स्ड हैं। इसका अर्थ यह है कि आप using निर्देश के साथ नामस्थान आयात कर सकते हैं और फिर अपने कोड में कक्षा के नामों को पूर्ण रूप से अर्हता प्राप्त करने की आवश्यकता नहीं है, उदा। निम्नलिखित में से कौन सा अधिक पठनीय है?

Vehicles.Cars.Wheel wheel = new Vehicles.Cars.Wheel(); 

या

CarWheel wheel = new CarWheel(); 

यह स्पष्ट दोनों क्या कर रहे हैं, लेकिन दूसरी काफी कम है।


नोट अगर आप नाम में विशेषज्ञता शामिल करते हैं, तो आप पा सकते हैं कि है कि आप सभी नेस्टेड नेमस्पेस (.Cars, .Trucks, आदि) जो दर्दनाक हो सकता है अगर वे आम तौर पर इस्तेमाल कर रहे हैं की जरूरत नहीं है एक साथ, और इसलिए उन्हें उपयोग करने वाली प्रत्येक फ़ाइल को सभी नामस्थानों को आयात करना होगा, उदाहरण के लिए

using Vehicles; 
using Vehicles.Cars; 
using Vehicles.Trucks; 
using Vehicles.SomethingElse; 
using Vehicles.YetAnotherThing; 

आप पा using निर्देशों के इस एक ही ढेर प्रत्येक फ़ाइल के शीर्ष पर है, तो एक भी नाम स्थान में कक्षाएं पतन नीचे। आप आम तौर पर सभी संबंधित कार्यक्षमताओं को शामिल करते हैं जिन्हें एक ही नामस्थान में एक साथ उपयोग करने की उम्मीद है, और बेसस्ट नेमसैस को विस्तारित करने वाली कार्यक्षमता के लिए केवल नेस्टेड वाले लोगों का उपयोग करें लेकिन कम बार उपयोग किया जाता है।

+0

"आम तौर पर बहुवचन नामस्थान" बिट ने मुझे बहुत मदद की - धन्यवाद! – mskfisher

3

मैं को विभिन्न नामस्थानों में नामों का पुन: उपयोग करने से बचने के लिए प्रयास करता हूं, खासकर अगर कोई ग्राहक एक ही प्रोग्राम में दोनों का उपयोग करना चाहेगा।

क्या आपको वास्तव में Car, Truck आदि के लिए नामस्थान की आवश्यकता है? इन सभी नामस्थानों की तरह लगता है कि उन्हें कक्षा नामस्थानों की तुलना में होना चाहिए। शायद आपकी असली स्थिति में यह अधिक समझ में आता है ...

+0

हां, मैं आपका बिंदु देखता हूं। मुझे लगता है कि वास्तव में जो स्थिति है वह थोड़ा अलग है लेकिन जिस डोमेन में मैं काम कर रहा हूं वह शब्दावली है जो बहुत सारे पृष्ठभूमि ज्ञान के बिना समझना बहुत मुश्किल होगा। मेरे मामले में नामस्थान कक्षाओं के बजाय नामस्थान के रूप में समझ में आता है। –

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