जवाबों:
आंशिक कक्षाओं का सबसे बड़ा उपयोग कोड जनरेटर / डिजाइनरों के लिए जीवन को आसान बनाना है। आंशिक कक्षाएं जनरेटर को केवल उस कोड को उत्सर्जित करने की अनुमति देती हैं जिनकी उन्हें उत्सर्जन करने की आवश्यकता होती है और उन्हें फ़ाइल के उपयोगकर्ता संपादन से निपटना नहीं पड़ता है। उपयोगकर्ता इसी तरह से दूसरे आंशिक वर्ग के द्वारा नए सदस्यों के साथ वर्ग की व्याख्या करने के लिए स्वतंत्र हैं। यह चिंताओं को अलग करने के लिए एक बहुत ही साफ ढांचा प्रदान करता है।
इसे देखने का एक बेहतर तरीका यह देखना है कि डिजाइनरों ने आंशिक कक्षाओं से पहले कैसे कार्य किया। WinForms डिजाइनर कोड को संशोधित नहीं करने के बारे में जोरदार शब्दों वाली टिप्पणियों के साथ एक क्षेत्र के अंदर सभी कोड को बाहर थूक देगा। बाद के प्रसंस्करण के लिए उत्पन्न कोड को खोजने के लिए सभी प्रकार के अनुमान लगाने थे। अब यह केवल डिज़ाइनर। फाइल को खोल सकता है और इसमें उच्च स्तर का विश्वास होता है कि इसमें केवल डिजाइनर के लिए प्रासंगिक कोड होता है।
एक अन्य उपयोग विभिन्न इंटरफेस के कार्यान्वयन को विभाजित करने के लिए है, जैसे:
partial class MyClass : IF1, IF2, IF3
{
// main implementation of MyClass
}
partial class MyClass
{
// implementation of IF1
}
partial class MyClass
{
// implementation of IF2
}
Implements
कीवर्ड का उपयोग करता है एक विधि इंटरफ़ेस से संबंधित है)
अन्य उत्तरों के अलावा ...
मैंने उन्हें देव-कक्षाओं को फिर से लाने में एक कदम-पत्थर के रूप में मददगार पाया है। यदि किसी वर्ग की कई ज़िम्मेदारियाँ हैं (विशेषकर यदि यह एक बहुत बड़ी कोड-फ़ाइल है) तो मुझे आयोजन के लिए प्रथम-पास के रूप में 1x आंशिक वर्ग-प्रति-जिम्मेदारी जोड़ने के लिए लाभकारी लगता है और फिर कोड को फिर से भरना है।
यह बहुत मदद करता है क्योंकि यह कोड को वास्तव में निष्पादित व्यवहार को प्रभावित किए बिना कोड को अधिक पठनीय बनाने में मदद कर सकता है। यह तब भी पहचानने में मदद कर सकता है जब एक जिम्मेदारी को दूर करना आसान होता है या अन्य पहलुओं के साथ कसकर उलझ जाता है।
हालाँकि - स्पष्ट होना - यह अभी भी बुरा कोड है, विकास के अंत में आप अभी भी एक जिम्मेदारी प्रति वर्ग चाहते हैं ( आंशिक वर्ग के अनुसार नहीं )। यह सिर्फ एक कदम-पत्थर है :)
आंशिक विधि घोषणा केवल कोड यहां तक कि विधि घोषणा के साथ ही संकलित हो जाती है और यदि विधि का कार्यान्वयन मौजूद नहीं है तो संकलक उस कोड के टुकड़े को सुरक्षित रूप से निकाल सकता है और कोई संकलन समय त्रुटि नहीं होगी।
बिंदु 4 को सत्यापित करने के लिए। बस एक जीत परियोजना बनाएं और इस लाइन को फॉर्म 1 कंस्ट्रक्टर के बाद शामिल करें और कोड को संकलित करने का प्रयास करें
partial void Ontest(string s);
आंशिक कक्षाओं को लागू करते समय विचार करने के लिए यहां कुछ बिंदु दिए गए हैं: -
एक महान उपयोग हाथ से लिखे गए कोड से उत्पन्न कोड को अलग कर रहा है जो एक ही कक्षा में हैं।
उदाहरण के लिए चूंकि LINQ से SQL आंशिक कक्षाओं का उपयोग करता है इसलिए आप कार्यक्षमता के कुछ टुकड़ों (जैसे कई-से-कई रिश्ते) के अपने कार्यान्वयन को लिख सकते हैं और जब आप कोड को री-जनरेट करते हैं तो कस्टम कोड के वे टुकड़े ओवरराइट नहीं होंगे।
वही WinForms कोड के लिए जाता है। सभी डिज़ाइनर जनरेट किए गए कोड एक फ़ाइल में जाते हैं जिसे आप आमतौर पर नहीं छूते हैं। आपका हाथ से लिखा कोड दूसरी फाइल में चला जाता है। इस तरह, जब आप डिज़ाइनर में कुछ बदलते हैं, तो आपके परिवर्तन नहीं होते हैं।
यह सच है कि ऑटो कोड पीढ़ी में आंशिक वर्ग का उपयोग किया जाता है, एक उपयोग एक बड़ी कक्षा फ़ाइल को बनाए रख सकता है जिसमें कोड की हजार लाइनें हो सकती हैं। आपको कभी नहीं पता कि आपकी कक्षा 10 हजार लाइनों के साथ समाप्त हो सकती है और आप अलग नाम के साथ एक नया वर्ग नहीं बनाना चाहते हैं।
public partial class Product
{
// 50 business logic embedded in methods and properties..
}
public partial class Product
{
// another 50 business logic embedded in methods and properties..
}
//finally compile with product.class file.
एक अन्य संभावित उपयोग यह हो सकता है कि एक से अधिक डेवलपर एक ही वर्ग पर काम कर सकते हैं क्योंकि वे विभिन्न स्थानों पर संग्रहीत हैं। लोग हंस सकते हैं लेकिन आप कभी नहीं जानते कि यह कभी-कभी मुट्ठी भर हो सकता है।
public partial class Product
{
//you are writing the business logic for fast moving product
}
public partial class Product
{
// Another developer writing some business logic...
}
आशा है कि यह समझ में आता है!
आंशिक कक्षाओं में कई फाइलें होती हैं।
आप C # वर्ग घोषणा पर आंशिक संशोधक का उपयोग कैसे कर सकते हैं?
आंशिक कक्षाओं के साथ, आप भौतिक रूप से एक वर्ग को कई फाइलों में अलग कर सकते हैं। यह अक्सर कोड जनरेटर द्वारा किया जाता है।
उदाहरण
सामान्य C # कक्षाओं के साथ, आप एक ही प्रोजेक्ट में दो अलग-अलग फ़ाइलों में एक क्लास घोषित नहीं कर सकते। लेकिन partial
संशोधक के साथ , आप कर सकते हैं।
यह उपयोगी है अगर एक फ़ाइल को आम तौर पर संपादित किया जाता है और दूसरा मशीन-जनरेट किया जाता है या शायद ही कभी संपादित किया जाता है।
यहाँ एक उदाहरण स्पष्ट करना है:
class Program
{
static void Main()
{
A.A1();
A.A2();
}
}
फ़ाइल की सामग्री A1.cs: C #
using System;
partial class A
{
public static void A1()
{
Console.WriteLine("A1");
}
}
फ़ाइल की सामग्री A2.cs: C #
using System;
partial class A
{
public static void A2()
{
Console.WriteLine("A2");
}
}
आउटपुट:
A1
A2
यहां आंशिक आवश्यकता है।
यदि आप partial
संशोधक को हटाते हैं , तो आपको इस पाठ में एक त्रुटि मिलेगी:
[नामस्थान '
<global namespace>
' में पहले से ही 'A
' के लिए एक परिभाषा है ]।
सुझाव:
इसे ठीक करने के लिए, आप या तो partial
कीवर्ड का उपयोग कर सकते हैं , या क्लास के नामों में से एक को बदल सकते हैं।
आंशिक वर्गों के साथ C # संकलक कैसे व्यवहार करता है?
यदि आप उपरोक्त प्रोग्राम (IL Disassembler का उपयोग करके) को अलग करते हैं, तो आप देखेंगे कि A1.cs और A2.cs फाइलें समाप्त हो गई हैं। आप पाएंगे कि क्लास ए मौजूद है।
कक्षा A में समान कोड ब्लॉक में A1 और A2 के तरीके होंगे। दोनों वर्गों को एक में मिला दिया गया।
A1.cs और A2.cs का संकलित परिणाम: C #
internal class A
{
// Methods
public static void A1()
{
Console.WriteLine("A1");
}
public static void A2()
{
Console.WriteLine("A2");
}
}
सारांश
विशाल वर्ग के साथ काम करते समय, या टीम पर काम करते समय, जितना संभव हो सके सब कुछ साफ रखें, आप बिना ओवरराइड किए (या हमेशा सुधार के बिना) संपादन कर सकते हैं
यदि आपके पास एक पर्याप्त बड़ा वर्ग है जो खुद को प्रभावी रीफैक्टरिंग के लिए उधार नहीं देता है, तो इसे कई फाइलों में अलग करने से चीजों को व्यवस्थित रखने में मदद मिलती है।
उदाहरण के लिए, यदि आपके पास चर्चा मंच और उत्पादों की प्रणाली वाली साइट के लिए डेटाबेस है, और आप दो अलग-अलग प्रदाता कक्षाएं नहीं बनाना चाहते हैं (प्रॉक्सी क्लास के रूप में एक ही बात नहीं है, तो बस स्पष्ट होना चाहिए), आप कर सकते हैं विभिन्न फ़ाइलों में एक ही आंशिक वर्ग बनाएँ, जैसे
MyProvider.cs - कोर तर्क
MyProvider.Forum.cs - विशेष रूप से मंच से संबंधित तरीके
MyProvider.Product.cs - उत्पादों के लिए तरीके
यह सिर्फ चीजों को व्यवस्थित रखने का एक और तरीका है।
साथ ही, जैसा कि अन्य लोगों ने कहा है, यह अगली बार कक्षा के पुनर्जीवित होने पर आपके परिवर्धन को नष्ट करने के जोखिम के बिना एक उत्पन्न वर्ग के तरीकों को जोड़ने का एकमात्र तरीका है। यह टेम्पलेट-जनरेट (T4) कोड, ORMs, आदि के साथ काम आता है।
पूर्व-संकलक निर्देशों के विकल्प के रूप में।
यदि आप पूर्व-संकलक निर्देशों (अर्थात् #IF DEBUG
) का उपयोग करते हैं, तो आप अपने वास्तविक रिलीज कोड के साथ अंतःक्रियात्मक रूप से देख रहे हैं।
आप इस कोड को रखने के लिए एक अलग आंशिक वर्ग बना सकते हैं और या तो पूरे आंशिक वर्ग को एक निर्देश में लपेट सकते हैं, या उस कोड-फ़ाइल को संकलक को भेजे जाने से रोक सकते हैं (प्रभावी रूप से वही कर रहे हैं)।
सेवा संदर्भ एक अन्य उदाहरण है जहां आंशिक कक्षाएं उपयोगकर्ता-निर्मित कोड से उत्पन्न कोड को अलग करने के लिए उपयोगी हैं।
जब आप सेवा संदर्भ को अद्यतन करते हैं, तो आप उन्हें अधिलेखित किए बिना सेवा वर्गों को "विस्तारित" कर सकते हैं।
एक और उपयोग मैंने देखा है,
डेटा एक्सेस लॉजिक के बारे में एक बड़े अमूर्त वर्ग का विस्तार,
मेरे पास Post.cs, Comment.cs, Pages.cs नाम के साथ विभिन्न फाइलें हैं ...
in Post.cs
public partial class XMLDAO :BigAbstractClass
{
// CRUD methods of post..
}
in Comment.cs
public partial class XMLDAO :BigAbstractClass
{
// CRUD methods of comment..
}
in Pages.cs
public partial class XMLDAO :BigAbstractClass
{
// CRUD methods of Pages..
}
ज्यादातर लोग टिप्पणी करते हैं कि partial
केवल एक वर्ग के लिए उपयोग किया जाना चाहिए जिसमें एक उत्पन्न कोड फ़ाइल या इंटरफेस है। मैं असहमत हूँ, और यहाँ क्यों है।
एक उदाहरण के लिए, आइए C # System.Math वर्ग को देखें ... वह वर्ग है । मैं एक ही कोड फ़ाइल में सभी 70 + विधियों को सामान करने का प्रयास नहीं करूंगा। इसे बनाए रखना दुःस्वप्न होगा।
प्रत्येक गणित विधि को अलग-अलग आंशिक श्रेणी की फाइलों में, और सभी कोड फाइलों को प्रोजेक्ट में एक मैथ फोल्डर में रखने से काफी क्लीनर संगठन होगा।
वही कई अन्य वर्गों के लिए सही / धारण कर सकता है जिनके पास बड़ी मात्रा में विविध कार्यक्षमता है। उदाहरण के लिए, PrivateProfile API को प्रबंधित करने के लिए एक वर्ग एकल प्रोजेक्ट फ़ोल्डर में आंशिक वर्ग फ़ाइलों के साफ सेट में विभाजित होने से लाभान्वित हो सकता है।
व्यक्तिगत रूप से, मैं यह भी विभाजित करता हूं कि प्रत्येक विधि या विधि कार्यात्मक समूह के लिए अधिकांश लोग "सहायक" या "उपयोगिता" वर्गों को व्यक्तिगत आंशिक फ़ाइलों में कहते हैं। एक परियोजना पर उदाहरण के लिए स्ट्रिंग हेल्पर वर्ग में लगभग 50 विधियां हैं। यह भी क्षेत्रों का उपयोग करते हुए एक लंबे समय तक कोड कोड होगा। प्रत्येक विधि के लिए व्यक्तिगत आंशिक वर्ग फ़ाइलों का उपयोग करना बनाए रखना काफी आसान है।
मैं बस आंशिक कक्षाओं का उपयोग करने में सावधान रहूंगा और ऐसा करते समय पूरे कोड फ़ाइल लेआउट को पूरे प्रोजेक्ट के अनुरूप रखूंगा। जैसे कि किसी भी क्लास पब्लिक एनम और क्लास प्राइवेट मेंबर्स को कॉमन.एक्स या इसी तरह से नाम वाली फाइल को फोल्डर में रखने के बजाय, उन्हें फाइल में फैलाने के बजाय जब तक कि वे केवल उस आंशिक फाइल के लिए विशिष्ट न हों, जिसमें वे निहित हैं।
ध्यान रखें कि जब आप एक वर्ग को अलग-अलग फ़ाइलों में विभाजित करते हैं तो आप टेक्स्ट एडिटर स्प्लिटर बार का उपयोग करने की क्षमता भी खो देते हैं जिससे आप एक साथ वर्तमान फ़ाइल के दो अलग-अलग अनुभागों को देख सकते हैं।
आंशिक कक्षाएं केवल स्रोत फ़ाइलों को जोड़कर एक उपयुक्त डिज़ाइन किए गए प्रोग्राम में कार्यक्षमता को जोड़ना संभव बनाती हैं। उदाहरण के लिए, एक फ़ाइल-आयात कार्यक्रम को डिज़ाइन किया जा सकता है ताकि कोई व्यक्ति विभिन्न प्रकार की ज्ञात फ़ाइलों को मॉड्यूल जोड़कर उन्हें संभाल सके। उदाहरण के लिए, मुख्य फ़ाइल प्रकार कनवर्टर में एक छोटा वर्ग शामिल हो सकता है:
आंशिक पब्लिक क्लास zzFileConverterRegistrar घटना रजिस्टर (zVFileConverter के रूप में byVal mainConverter) सब रजिस्टर (बायल मेनकॉन्जर zzFileConverter के रूप में) स्थापना रजिस्टर अंत उप एंड क्लास
प्रत्येक मॉड्यूल जो एक या एक से अधिक प्रकार के फ़ाइल कनवर्टर को पंजीकृत करना चाहता है, उसमें कुछ शामिल हो सकते हैं:
आंशिक पब्लिक क्लास zzFileConverterRegistrar निजी उप रजिस्टरगिफ (zzFileConverter के रूप में ByVal mainConverter) संभालती है mainConverter.RegisterConverter ("GIF", GifConverter.NewFactory) अंत उप एंड क्लास
ध्यान दें कि मुख्य फ़ाइल कनवर्टर वर्ग "उजागर" नहीं है - यह बस थोड़ा स्टब वर्ग उजागर करता है जो ऐड-इन मॉड्यूल हुक कर सकता है। नामकरण संघर्ष का थोड़ा जोखिम है, लेकिन अगर प्रत्येक ऐड-इन मॉड्यूल के "रजिस्टर" रूटीन को उस फ़ाइल के प्रकार के अनुसार नाम दिया गया है, जिसके साथ वे निपटते हैं, तो उन्हें शायद कोई समस्या नहीं होनी चाहिए। अगर कोई इस तरह की चीजों को लेकर चिंतित था, तो वह पंजीकरण सबरूटीन के नाम पर एक GUID चिपका सकता है।
संपादित करें / परिशिष्ट स्पष्ट होने के लिए, इसका उद्देश्य एक साधन प्रदान करना है जिसके द्वारा विभिन्न वर्गों को एक मुख्य कार्यक्रम या कक्षा उनके बारे में बता सकती है। केवल मुख्य फाइल कन्वर्टर zzFileConverterRegistrar के साथ क्या करेंगे, इसका एक उदाहरण बना सकते हैं और registerAll पद्धति को कॉल करेंगे जो रजिस्टर ईवेंट को आग देगा। कोई भी मॉड्यूल जो उस घटना को हुक करना चाहता है, वह इसके जवाब में मनमाने ढंग से कोड निष्पादित कर सकता है (यह संपूर्ण विचार है) लेकिन ऐसा कुछ भी नहीं है जो मॉड्यूल अनुचित तरीके से zzFileConverterRegistrar वर्ग का विस्तार करके कर सकता है, एक विधि को परिभाषित करने के अलावा अन्य नाम से मेल खाता है। । यह निश्चित रूप से एक अनुचित तरीके से लिखे गए एक्सटेंशन के लिए एक और अनुचित तरीके से लिखे गए एक्सटेंशन को तोड़ने के लिए संभव होगा, लेकिन इसके लिए समाधान किसी के लिए भी है जो नहीं चाहता है कि उसका एक्सटेंशन केवल ठीक से लिखने के लिए टूटे।
आंशिक वर्गों का उपयोग किए बिना, मुख्य फ़ाइल कनवर्टर वर्ग के भीतर कहीं कोड का एक सा हो सकता है, जो इस तरह दिखता है:
RegisterConverter ("GIF", GifConvertor.NewFactory) RegisterConverter ("बीएमपी", BmpConvertor.NewFactory) RegisterConverter ("JPEG", JpegConvertor.NewFactory)
लेकिन एक और कनवर्टर मॉड्यूल को जोड़ने के लिए कनवर्टर कोड के उस हिस्से में जाने और नए कनवर्टर को सूची में जोड़ने की आवश्यकता होगी। आंशिक तरीकों का उपयोग करना, जो अब आवश्यक नहीं है - सभी कन्वर्टर्स स्वचालित रूप से शामिल हो जाएंगे।
IModule
इंटरफ़ेस को लागू करने में मॉड्यूल को परिभाषित किया गया है?
IModule
कर सकते हैं जो कार्यान्वित करते हैं , आप MEF (जैसे कई में से एक), आदि-प्लगइन का उपयोग कर सकते हैं
आंशिक वर्गों ने हाल ही में स्रोत नियंत्रण के साथ मदद की जहां कई डेवलपर्स एक फाइल में जोड़ रहे थे जहां फ़ाइल के एक ही हिस्से में नए तरीके जोड़े गए थे (रेस्पर द्वारा स्वचालित)।
इन दबावों ने मर्ज की वजह से टकराव पैदा किया। मुझे नए तरीकों को पूर्ण कोड ब्लॉक के रूप में लेने के लिए मर्ज टूल को बताने का कोई तरीका नहीं मिला।
इस संबंध में आंशिक कक्षाएं डेवलपर्स को अपनी फ़ाइल के एक संस्करण से चिपके रहने की अनुमति देती हैं, और हम उन्हें बाद में हाथ से मर्ज कर सकते हैं।
उदाहरण -
से MSDN :
1. संकलित समय के लिए, आंशिक प्रकार की परिभाषाओं के गुणों को मिला दिया जाता है। उदाहरण के लिए, निम्नलिखित घोषणाओं पर विचार करें:
[SerializableAttribute]
partial class Moon { }
[ObsoleteAttribute]
partial class Moon { }
वे निम्नलिखित घोषणाओं के समतुल्य हैं:
[SerializableAttribute]
[ObsoleteAttribute]
class Moon { }
निम्नलिखित सभी आंशिक प्रकार की परिभाषाओं से विलय किए गए हैं:
XML टिप्पणियाँ
इंटरफेस
सामान्य प्रकार के पैरामीटर गुण
वर्ग गुण
सदस्यों
2. एक साधारण बात, नेस्टेड आंशिक वर्ग भी आंशिक हो सकते हैं:
partial class ClassWithNestedClass
{
partial class NestedClass { }
}
partial class ClassWithNestedClass
{
partial class NestedClass { }
}
यहाँ आंशिक वर्गों के कुछ फायदों की सूची दी गई है।
आप यूआई डिजाइन कोड और बिजनेस लॉजिक कोड को अलग कर सकते हैं ताकि पढ़ने और समझने में आसानी हो। उदाहरण के लिए आप Visual Studio का उपयोग करके एक वेब एप्लिकेशन विकसित कर रहे हैं और एक नया वेब फ़ॉर्म जोड़ रहे हैं, तो दो स्रोत फाइलें हैं, "aspx.cs" और "aspx.designer.cs"। इन दो फ़ाइलों में आंशिक कीवर्ड के साथ एक ही वर्ग है। ".Aspx.cs" वर्ग का व्यावसायिक तर्क कोड है जबकि "aspx.designer.cs" में उपयोगकर्ता इंटरफ़ेस नियंत्रण परिभाषा है।
स्वचालित रूप से उत्पन्न स्रोत के साथ काम करते समय, कोड को स्रोत फ़ाइल को फिर से बनाए बिना वर्ग में जोड़ा जा सकता है। उदाहरण के लिए आप LINQ से SQL में काम कर रहे हैं और एक DBML फ़ाइल बनाएँ। अब जब आप एक टेबल को ड्रैग और ड्रॉप करते हैं तो यह डिज़ाइनर में एक आंशिक क्लास बनाता है। क्लास में सभी टेबल कॉलम में गुण होते हैं। UI ग्रिड पर बाँधने के लिए आपको इस तालिका में और स्तंभों की आवश्यकता है, लेकिन आप डेटाबेस तालिका में एक नया स्तंभ जोड़ना नहीं चाहते हैं, इसलिए आप इस वर्ग के लिए एक अलग स्रोत फ़ाइल बना सकते हैं, जिसमें उस स्तंभ के लिए एक नई संपत्ति हो और यह होगा एक आंशिक वर्ग हो। ताकि डेटाबेस तालिका और DBML इकाई के बीच मानचित्रण प्रभावित हो लेकिन आप आसानी से एक अतिरिक्त क्षेत्र प्राप्त कर सकते हैं। इसका मतलब है कि आप सिस्टम जनरेट किए गए कोड के साथ बिना मैसेज किए भी कोड लिख सकते हैं।
एक से अधिक डेवलपर एक साथ वर्ग के लिए कोड लिख सकते हैं।
आप बड़ी कक्षाओं को जमा करके अपने आवेदन को बेहतर बनाए रख सकते हैं। मान लें कि आपके पास एक वर्ग है जिसमें कई इंटरफेस हैं ताकि आप इंटरफ़ेस के उपकरणों के आधार पर कई स्रोत फ़ाइलें बना सकें। एक इंटरफ़ेस को लागू करना और समझना आसान है जिस पर स्रोत फ़ाइल में एक आंशिक वर्ग है।
जब भी मेरे पास एक वर्ग होता है जिसमें एक नेस्टेड वर्ग होता है जो किसी भी महत्वपूर्ण आकार / जटिलता का होता है, तो मैं कक्षा को चिह्नित करता हूं partial
और नेस्टेड क्लास को एक अलग फ़ाइल में डाल देता हूं । मैं नियम का उपयोग करके नेस्टेड क्लास वाली फ़ाइल का नाम देता हूं: [वर्ग का नाम]। [नेस्टेड क्लास का नाम] .cs
निम्नलिखित MSDN ब्लॉग में स्थिरता के लिए नेस्टेड कक्षाओं के साथ आंशिक कक्षाओं का उपयोग करने के बारे में बताया गया है: http://blogs.msdn.com/b/marcelolr/archive/2009/04/13/use-partial-classes-with-nested-classes-for- maintainability.aspx
मुझे पता है कि यह प्रश्न वास्तव में पुराना है, लेकिन मैं आंशिक वर्गों पर अपना ध्यान जोड़ना चाहूंगा।
एक कारण यह है कि मैं व्यक्तिगत रूप से आंशिक कक्षाओं का उपयोग करता हूं, जब मैं एक कार्यक्रम, विशेष रूप से राज्य मशीनों के लिए बाइंडिंग बना रहा हूं।
उदाहरण के लिए, ओपनजीएल एक राज्य मशीन है, ऐसे तरीकों के ढेर हैं जो सभी वैश्विक रूप से बदले जा सकते हैं, हालांकि, मेरे अनुभव में ओपनजीएल के समान कुछ बाध्यकारी है जहां बहुत सारे तरीके हैं, वर्ग आसानी से 10k एलओसी से अधिक हो सकता है।
आंशिक कक्षाएं मेरे लिए इसे तोड़ देंगी और जल्दी से विधियां खोजने में मेरी मदद करेंगी ।
आंशिक रूप से कोड जनरेटरों की मदद करने के लिए प्राथमिक कक्षाएं शुरू की जाती हैं, इसलिए हम (उपयोगकर्ता) अपने सभी काम / परिवर्तन उत्पन्न एएसपी की तरह खत्म नहीं करते हैं। जैसे कि हम पुन: उत्पन्न करते हैं, प्रत्येक बार ASP.NET के -designer.cs वर्ग की तरह लगभग सभी नए उपकरण उत्पन्न होते हैं। कोड LINQ, EntityFrameworks, ASP.NET, उत्पन्न कोड के लिए आंशिक कक्षाओं का उपयोग करते हैं, इसलिए हम आंशिक रूप से वर्गों और विधियों का लाभ लेते हुए इन उत्पन्न कोडों के तर्क को सुरक्षित रूप से जोड़ या बदल सकते हैं, लेकिन आंशिक कक्षाओं का उपयोग करके उत्पन्न कोड में सामान जोड़ने से पहले बहुत सावधानी से रहें। अगर हम रनटाइम त्रुटियों का परिचय देते हैं तो हम बिल्ड को तोड़ते हैं लेकिन सबसे खराब। अधिक जानकारी के लिए इस http://www.4guysfromrolla.com/articles/071509-1.aspx को देखें
मैं दो उपयोगों पर ध्यान देता हूं जिन्हें मैं स्पष्ट रूप से उत्तर में नहीं पा सकता था।
कुछ डेवलपर्स अपनी कक्षा के विभिन्न "भागों" को अलग करने के लिए टिप्पणियों का उपयोग करते हैं। उदाहरण के लिए, एक टीम निम्नलिखित सम्मेलन का उपयोग कर सकती है:
public class MyClass{
//Member variables
//Constructors
//Properties
//Methods
}
आंशिक कक्षाओं के साथ, हम एक कदम आगे जा सकते हैं, और वर्गों को अलग-अलग फ़ाइलों में विभाजित कर सकते हैं। एक सम्मेलन के रूप में, एक टीम प्रत्येक फ़ाइल को उसके अनुरूप अनुभाग के साथ प्रत्यय दे सकती है। इसलिए ऊपर में हमारे पास कुछ इस तरह होगा: MyClassMembers.cs, MyClassConstructors.cs, MyClassProperties.cs, MyClassMethods.cs।
अन्य उत्तरों के अनुसार, कक्षा को विभाजित करने के लायक है या नहीं, शायद इस बात पर निर्भर करता है कि इस मामले में कक्षा कितनी बड़ी है। यदि यह छोटा है, तो संभवतः एक मास्टर क्लास में सब कुछ करना आसान है। लेकिन अगर उन वर्गों में से कोई भी बहुत बड़ा हो जाता है, तो मास्टर क्लास को साफ रखने के लिए इसकी सामग्री को एक अलग आंशिक वर्ग में ले जाया जा सकता है। उस मामले में एक कन्वेंशन सेक्शन हेडिंग के बाद "आंशिक वर्ग देखें" जैसे कुछ कहने में टिप्पणी छोड़ सकता है:
//Methods - See partial class
यह शायद एक दुर्लभ घटना है, लेकिन पुस्तकालयों से दो कार्यों के बीच एक नाम स्थान टकराव हो सकता है जिसे आप उपयोग करना चाहते हैं। एक एकल वर्ग में, आप इनमें से किसी एक के लिए उपयोग कर सकते हैं। दूसरे के लिए आपको पूरी तरह से योग्य नाम या अन्य उपनाम की आवश्यकता होगी। आंशिक कक्षाओं के साथ, चूंकि प्रत्येक नेमस्पेस और स्टेटमेंट लिस्ट का उपयोग करना अलग है, इसलिए फंक्शन के दो सेट को दो अलग-अलग फाइलों में अलग किया जा सकता है।
using Library1 = The.Namespace.You.Need
याglobal::Root.Of.Namespace