2010-06-24 3 views
36

मैं Design Guidelines for Developing Class Libraries में वर्णित सामान्य नामकरण सम्मेलनों से चिपकने की कोशिश कर रहा हूं। मैंने प्रत्येक प्रकार को अपनी स्रोत फ़ाइल में रखा है (और आंशिक कक्षाओं को फ़ाइल नाम के रूप में प्रकार के नाम का उपयोग करके, Naming Conventions for Partial Class Files प्रश्न में वर्णित अनुसार कई फ़ाइलों में विभाजित किया जाएगा)।जेनेरिक कक्षाओं के लिए सी # स्रोत फ़ाइलों का नाम कैसे दें

उदाहरण:

namespace Demo.Bla       // project 
{ 
    enum FlowDirection { }     // in file FlowDirection.cs 
    class LayoutManager { }    // in file LayoutManager.cs 
} 

namespace Demo.Bla.LayoutControllers  // folder LayoutControllers in project 
{ 
    class StackPanelLayoutController { } // in file LayoutControllers/StackPanelLayoutController 
} 

लेकिन मुझे यकीन है कि मैं स्रोत फ़ाइलें जो सामान्य वर्गों को शामिल नामकरण की एक चालाक रास्ता ले कर आए हैं नहीं कर रहा हूँ। उदाहरण के लिए, मैं वर्गों निम्नलिखित है कि कहते हैं:

namespace Demo.Bla.Collections    // folder Collections 
{ 
    class Map<T> { }      // in file Map.cs (obviously) 
    class Bag { }       // in file Bag.cs (obviously) 
    class Bag<T> : Bag { }     // also in file Bag.cs ??? 
} 

मैं एक ही Bag.cs फ़ाइल में दोनों गैर सामान्य और सामान्य Bag वर्गों के कोड रखना चाहिए? आपकी आदतें क्या हैं?

+1

महान प्रश्न: बाहरी वर्ग + द्वारा और भीतरी वर्ग (Outer+Inner.cs) के नाम के बाद। – Marcel

+1

संभावित डुप्लिक: http://stackoverflow.com/questions/2611639/what-should-i-name-my-files-with-generic-class-definitions – Jehof

+1

@ जेहोफ: संबंधित, लेकिन डुप्लिक नहीं। यह एक सामान्य/गैर-सामान्य प्रश्न है (और एक नामकरण सम्मेलन प्रश्न भी है)। –

उत्तर

1

CoreFX GitHub भंडार में, माइक्रोसॉफ्ट वापस टिक सम्मेलनMatthias Jakobsson के जवाब में वर्णित पीछा कर रहा है अन्य वर्गों के भीतर परिभाषित वर्ग, नाम द्वारा रचित है

partial class ImmutableArray<T>    // ImmutableArray`1+Builder.cs 
{ 
    class Builder { } 
} 
+2

मुझे पता है कि यह एक वर्ष पुराना है, लेकिन मैं यह नोट करना चाहता था कि नामकरण के लिए यह दृष्टिकोण अब आपके द्वारा प्रदान किए गए कोरफ़ैक्स लिंक में उपयोग नहीं किया गया है। वे अब एक टिक के बजाय एक टिक और एक अवधि के बजाय अंडरस्कोर का उपयोग करते हैं। तो 'ImmutableArray'1 + Builder.cs' अब 'ImmutableArray_1.builder.cs' होगा –

5

आमतौर पर यदि मेरे पास प्रकार पैरामीटर की संख्या से "अधिभारित" कई प्रकार हैं, तो यह इसलिए है क्योंकि किसी दूसरे से प्राप्त होता है या एक दूसरे को बनाने के लिए उपयोग किया जाता है। मैंने उन्हें एक ही फाइल में रखा है।

एक वैकल्पिक विकल्प उन्हें अलग-अलग फाइलों में विभाजित करना होगा, एक फ़ाइल को "प्राथमिक" एक बनाना होगा, और अन्य लोग बिल्ड फ़ाइल में उस पर निर्भर "आंशिक" प्रश्न के अनुसार, प्रश्न में लिंक किए गए आंशिक वर्ग प्रश्न के अनुसार ।

इस तरह आप विजुअल स्टूडियो में एक दृश्य लिंक के साथ समाप्त हो सकते हैं, लेकिन फिर भी प्रति फ़ाइल एक वर्ग उनके साथ काम करना आसान बनाता है।

0

मैं अपने जेनेरिक वर्गों के नाम पर एक प्रत्यय 'टी' जोड़ता हूं।

class Bag { }       // in file Bag.cs 
class BagT<T> : Bag { }     // in file BagT.cs 
class BagInputs : BagT<Input>   // in file BagInputs.cs 

आप से पूछा,

मैं एक ही Bag.cs ​​फ़ाइल में दोनों गैर सामान्य और सामान्य बैग वर्गों के कोड रखना चाहिए? आपकी आदतें क्या हैं?

मेरा उपरोक्त सम्मेलन गैर मानक है; मुझे यह स्पष्ट करना चाहिए कि मैं "मेरी आदतें क्या हैं" का उत्तर दे रहा था और जरूरी नहीं कि "आपको क्या करना चाहिए"।

+4

यह मेरे दिमाग में कुछ असामान्य लगता है। यदि आप 'Tuple' प्रकारों को .NET 4 में डिज़ाइन कर रहे थे तो आपने क्या किया होगा? –

+1

@ जोन - हां, असामान्य: मैं कुछ गैर-मानक नामकरण सम्मेलनों का उपयोग करता हूं, जरूरी नहीं कि .NET लाइब्रेरी प्रकारों के नामकरण सम्मेलनों की तरह। मैंने उन 'टुपल' प्रकारों से पहले नहीं मुलाकात की है, लेकिन मुझे लगता है कि मैंने उन्हें 'TupleT.cs' में सभी 'TupleT' कहा होगा। – ChrisW

+1

दिलचस्प; विचार के लिए धन्यवाद, लेकिन मुझे यह बहुत पसंद नहीं है। यह .NET ('सूची ' में उपयोग किए जाने वाले सभी अन्य सामान्य प्रकारों के साथ फिट नहीं है 'सूची ' जो मुझे वास्तव में अजीब लगता है)। –

38

मुझे लगता है कि इस समस्या के लिए आम समाधान इस तरह फ़ाइल को नाम देने के लिए है:

Bag.cs and Bag`1.cs 

इस तरह माइक्रोसॉफ्ट में इस मुद्दे को संभालने है:

{ClassName}`{NumberOfGenericParameters} 

यह आप इस फ़ाइल का नाम देना होगा Asp.net एमवीसी जैसे ढांचे।

+0

ओह, मुझे एहसास नहीं हुआ था कि बैकटिक फ़ाइल नामों में एक कानूनी चरित्र है (विंडोज़ पर, कम से कम)। तो इसका मतलब है कि किसी भी सामान्य प्रकार के पास बैकटिक और उसके नाम पर एक संख्या होनी चाहिए। हम्म, मुझे इसे खत्म करना होगा। धन्यवाद। –

+1

@ पियर्रे, हां। इस तरह मैं इस मुद्दे को हल करता हूं। हालांकि, जब मेरे पास केवल सामान्य वर्ग है और कोई गैर-सामान्य संस्करण नहीं है, तो आमतौर पर मैं फ़ाइल नाम में बैक-टिक चरित्र नहीं डालता हूं। तो आपके मामले में मेरे पास "Map.cs" नाम की फ़ाइल में जेनेरिक मैप क्लास होगा। –

+0

+1 - यह समझदार सम्मेलन प्रतीत होता है। – Fenton

16

मैं कुछ

Bag.cs 
Bag`1.cs 
Bag`2.cs 

का उपयोग कर के रूप में यह है कि क्या Type.Name प्रदर्शित होता है पुस्तकालयों को देखा है।

मैं प्रकार पैरामीटर से अधिक विवरणात्मक होने के लिए तो मैं हाल ही में

Bag.cs 
Bag{T}.cs 
Bag{TKey, TValue}.cs 

उपयोग करने के लिए यह एक प्रारूप है कि यह भी एक्सएमएल टिप्पणियों के द्वारा समर्थित है करते हैं चाहते हैं।

enter image description here

तो मूल रूप से

:

class ImmutableArray { }      // ImmutableArray.cs 
class ImmutableArray<T> { }     // ImmutableArray`1.cs 
... 
class ImmutableDictionary<TKey, TValue> { } // ImmutableDictionary`2.cs 

और के लिए

/// <summary> 
/// ... 
/// Uses the <see cref="T:MyLibrary.Bag{TKey, TValue}" /> class. 
/// </summary> 
+0

der welten - सुझाव के लिए धन्यवाद। मुझे छोटे बैक-टिक + नंबर नामकरण योजना से सीधे प्रकार के पैरामीटर को फ़ाइल नाम में डालने का विचार पसंद है। –

+0

हाँ, यह दृष्टिकोण अधिक पठनीय लगता है। धन्यवाद। –

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