2012-02-27 15 views
8

मैं about partial classes पढ़ सकते हैं और उदाहरण के लिए, मैं कारण समझने वे उपयोग किया जाता है के लिए बाहर सत्तारूढ़ किआंशिक कक्षाओं का उद्देश्य क्या है?

जब बड़ी परियोजनाओं पर काम कर, अलग फ़ाइलों पर एक वर्ग के प्रसार कई सक्षम बनाता है बिना जब दृश्य स्टूडियो Windows Forms बनाता है, प्रोग्रामर एक ही समय में काम करने के लिए

बाद में मैंने this example पढ़ सकते हैं और मैंने देखा है कि वर्गों के सबसे आंशिक रूप में घोषित किया गया है। क्यूं कर?

+0

एक प्रयोग है कि के रूप में आप Winforms/WPF में ध्यान दें प्रयोग किया जाता है से अलग मशीन उत्पन्न भाग के लिए एक तंत्र है हैंड-कोड हिस्से। उन पंक्तियों के साथ यदि आप कक्षा के कार्यों के समान तार्किक अलगाव कर सकते हैं, तो यह उपयोगी हो सकता है। – kenny

+0

आपको उस व्यक्ति से पूछना होगा जो उन्हें लिखा था। – svick

+0

यदि आप सामान्य रूप से जानना चाहते हैं, तो [इस तरह] खोजें [http://stackoverflow.com/search?q=%5Bc%23%5D+partial+class)। – Guvante

उत्तर

5

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

उदाहरण के लिए, उत्पन्न कोड हो सकता है जो संपत्ति सत्यापन (IDataErrorInfo के माध्यम से) करता है लेकिन प्रत्येक संपत्ति पर सत्यापन पीढ़ी के समय निर्धारित नहीं किया जा सकता है, आंशिक वर्ग डेवलपर को बाद के बिंदु पर सत्यापन निर्दिष्ट करने की अनुमति देता है।

उत्पन्न फ़ाइल:

public partial class MyClass : IDataErrorInfo 
{ 
    partial void ValidateMyProperty(ref string error); 

    public string this[string propertyName] 
    { 
     get 
     { 
      string error = String.Empty; 
      if (propertyName == "MyProperty") 
       ValidateMyProperty(ref error); 

      return error; 
     } 
    } 

    public string Error { get { return String.Empty; } } 

    public int MyProperty { get; set; } 
} 

डेवलपर कार्यान्वित फ़ाइल:

public partial class MyClass 
{ 
    partial void ValidateMyProperty(ref string error) 
    { 
     if (MyProperty < 0) 
      error = "MyProperty cannot be negative."; 
    } 
} 
1

एक व्यावहारिक अनुप्रयोग है कि आप नाम स्थान के दायरे के अंदर, एक से अधिक स्थानों में आंशिक वर्ग को संशोधित कर सकते है। पठनीयता के लिए आप एक वर्ग को कई फाइलों में विभाजित कर सकते हैं।

आईई:
नाम स्थान में HelloWorld.cs में "Bleh"

public partial class testClass { 
    private int intMember; 
    public string stringMember; 
} 

नाम स्थान में HelloWorld2.cs में "Bleh"

public partial class testClass { 
    private int intAnotherInt; 
    public string stringAnotherString; 
} 

दोनों वर्गों घोषित किया गया वास्तविकता में एक ही चीज़ का प्रतिनिधित्व करते हैं, लेकिन उद्देश्य वर्ग को फाइलों में विभाजित करना था। संयुक्त दोनों वास्तव में इस तरह दिखते हैं:

public partial class testClass { 
    private int intAnotherInt; // Our int from HelloWorld2.cs 
    public string stringAnotherString; // Our string from HelloWorld2.cs 
    private int intMember; // Our int from HelloWorld.cs 
    public string stringMember; // Our string from HelloWorld.cs 
} 

अधिक जानकारी here

11

आंशिक कक्षाएं उपयोगी होने पर बहुत अच्छे उदाहरणों में से एक है जब वर्ग एक उपकरण (जैसे वीएस) द्वारा स्वचालित रूप से उत्पन्न होता है और आप उस वर्ग की कार्यक्षमता को विस्तारित करने में सक्षम होना चाहते हैं और उपकरण को आवश्यकता होने पर अपना कोड न खोएं अपने कोड को पुन: उत्पन्न करने के लिए। उदाहरण के लिए जब आप विजुअल स्टूडियो एंटिटी डेटा मॉडल डिजाइनर का उपयोग करते हैं तो संस्थाएं (कक्षाएं) आंशिक के रूप में उत्पन्न की जाएंगी।

5

आप एक बड़ा वर्ग है, तो यह कई स्रोत फ़ाइलों के बीच परिभाषा विभाजित करने के लिए सहायक हो सकता है।

इसके अलावा, यदि आप जेनरेट की गई कक्षा को विस्तारित करना चाहते हैं - कहें, टी 4 टेम्पलेट से या ओआरएम द्वारा - या किसी भी स्थिति में जहां आप मूल स्रोत फ़ाइल को संशोधित नहीं कर सकते या नहीं करना चाहते हैं, तो आप इसका उपयोग कर सकते हैं टेम्पलेट या ओआरएम मूल वर्ग को पुन: उत्पन्न करते समय नई कार्यक्षमता जोड़ने के लिए एक अतिरिक्त आंशिक कक्षा परिभाषा को हटाया नहीं जाएगा।

संपादित

बस एक अवलोकन है, लेकिन अपने बोली:

जब बड़ी परियोजनाओं पर काम कर, अलग फ़ाइलों पर एक वर्ग एक ही समय

पर इस पर काम करने के लिए कई प्रोग्रामर सक्षम बनाता प्रसार

MSDN से आ रही के बावजूद, मेरे साथ बहुत अच्छी तरह से बैठ नहीं है। यदि आप एक सभ्य स्रोत नियंत्रण प्रणाली (जैसे टीएफएस या यहां तक ​​कि एसवीएन) का उपयोग कर रहे हैं, तो स्रोत फ़ाइलों के भीतर विलीन हो जाता है जहां प्रत्येक देव अलग-अलग तरीकों पर काम कर रहा है, बहुत अच्छी तरह से संभाला जाता है।कह रही है कि आंशिक वर्गों का उपयोग कर यह आसान एकाधिक डेवलपर को एक ही कक्षा ताकत पर काम करने के लिए बनाता है (मैं दांव हूँ और, शायद है) वहाँ कोई प्रोत्साहित अलग स्रोत फ़ाइलों में उनके समाधान में हर कक्षा में हर विधि और संपत्ति विभाजित करने के लिए। यह बुरी बात है। सच में ख़राब। के रूप में, चाहिए होने वाली खुलासा हुआ-सामने जब-वार्ता-वेतन-साथ नए-नियुक्तियों बुरा।

0

के रूप में लिंक आप पोस्ट यह मतलब है कि आप एक से अधिक फ़ाइलों पर एक एकल वर्ग विभाजन हो सकता है और यह संकलन समय पर एकल वर्ग में पुनर्संयोजन हो जाएगा उल्लेख किया है।

अन्य लिंक आप पोस्ट ... आंशिक वर्गों कि जिस तरह से चिह्नित कर रहे हैं के लिए के रूप में

क्योंकि मार्कअप (aspx) एक डिजाइनर उत्पन्न वर्ग जो आप चीजों मार्कअप मेरा मानना ​​है कि में परिभाषित करने के लिए पहुँच देता है है ...

हां, तो वहाँ तीन फ़ाइलें ... productlist.aspx, productlist.cs, और productlist.designer.cs

productlist.aspx है मार्कअप

productlist.cs हैं आंशिक वर्ग है जिसे एम से संदर्भित किया जाता है rkup फ़ाइल और आपका कोड शामिल है।

productlist.designer.cs उत्पन्न आंशिक वर्ग जो

ऊपर .cs फ़ाइल
+0

पांच अलग-अलग आंशिक कक्षा/इंटरफ़ेस घोषणाओं के साथ कम से कम पांच फाइलें हैं: _ProductBL.cs_ फ़ाइल में 'ProductBLL' क्लास, _Product.cs_ फ़ाइल में' उत्पाद' क्लास, _IProductService.cs_ फ़ाइल में 'IProductService' इंटरफ़ेस', 'ProductDal' क्लास' _ProductDal.cs_ फ़ाइल, '_ProductService.cs_ फ़ाइल में ProductService' कक्षा में। – enzom83

+0

उन पूरी तरह से अलग वर्ग है जो एक दूसरे के साथ कुछ नहीं करना है। मैंने संदर्भ में अवधारणा को पहले ही समझाया है। – Timmerz

+0

आंशिक एक बहुत ही सरल अवधारणा है ... यह बस का अर्थ है ... एक भी वर्ग से अधिक बढ़ाया जा सकता है एक से अधिक फ़ाइलों। बस। समझने के लिए और कुछ नहीं। – Timmerz

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