वे काफी समकक्ष हैं (प्रदर्शन और स्मृति उपयोग के मामले में कोई अंतर नगण्य हैं)।
private List<string>name = new List<string>();
... काम हमेशा कोई बात नहीं क्या निर्माता वस्तु का एक उदाहरण बनाने के लिए प्रयोग किया जाता है होता है: केवल वास्तविक अंतर है कि जब आप क्या करते हैं। जब आप किसी कन्स्ट्रक्टर के भीतर असाइनमेंट करते हैं, तो यह तब होता है जब उस विशिष्ट कन्स्ट्रक्टर का उपयोग किया जाता है।
तो यदि आपके पास एकाधिक निर्माता हैं लेकिन आप हमेशा name
को उसी तरह से प्रारंभ करना चाहते हैं, तो यह प्रत्येक कन्स्ट्रक्टर में इसे स्पष्ट रूप से प्रारंभ करने के बजाय पहले फ़ॉर्म का उपयोग करने के लिए थोड़ा छोटा है।
एक सामान्य नियम के रूप में, हालांकि, मैं कन्स्ट्रक्टर कार्यान्वयन में फ़ील्ड प्रारंभ करना पसंद करता हूं, भले ही यह कुछ मामलों में कोड को अधिक वर्बोज़ बनाता है।
class MyClass
{
private List<string> _list = new List<string>();
public MyClass()
{
//some logic here
}
public MyClass(List<string> initialList) : this()
{
_list = initialList;
}
}
इस कोड के साथ, अगर आप दूसरे निर्माता कहते हैं, आप बेकार में एक सूची है कि लगभग तुरंत छोड़ दिया और के लिए पात्र बना दिया पैदा करेगा: निर्माता में
ठीक है, प्रदर्शन और स्मृति आवंटन के बारे में कैसे? – retide
यह वास्तव में समझ में नहीं आता है। यदि आप इसे एक कन्स्ट्रक्टर के रूप में पेश नहीं करते हैं, तो आप कुछ इंजेक्ट नहीं कर सकते हैं, और परीक्षण के लिए एक विशिष्ट कन्स्ट्रक्टर कोड गंध है (यह बहुत अधिक प्रत्यक्ष निर्भरताओं वाली कक्षा को इंगित करता है)। यदि आप वास्तव में कक्षा को रद्द करना चाहते हैं, तो उन सभी पैरामीटर को लें जिन्हें इंटरफेस के रूप में बदला जा सकता है। – Femaref
शायद, लेकिन इस सदस्य चर के साथ अपने प्रश्न के संदर्भ में, यह निश्चित रूप से एक विकल्प है। मैं सहमत हूं, इस मामले में जहां आपके पास कई गुण हो सकते हैं, एक इंटरफ़ेस बनाएं और इसे – Killnine