2011-12-11 9 views
11

में कंस्ट्रक्टर्स गठबंधन कर सकते हैं मैं निम्नलिखित कोड है:मैं सी #

public AccountService(ModelStateDictionary modelStateDictionary, string dataSourceID) 
    { 
     this._modelState = modelStateDictionary; 
     this._accountRepository = StorageHelper.GetTable<Account>(dataSourceID); 
     this._productRepository = StorageHelper.GetTable<Product>(dataSourceID); 
    } 

    public AccountService(string dataSourceID) 
    { 
     this._accountRepository = StorageHelper.GetTable<Account>(dataSourceID); 
     this._productRepository = StorageHelper.GetTable<Product>(dataSourceID); 
    } 

वहाँ कोई रास्ता है कि मैं कंस्ट्रक्टर्स को आसान बनाने में कर सकते हैं ताकि प्रत्येक नहीं है StorageHelper कॉल करने के लिए है?

इसके अलावा, मैं इस निर्दिष्ट करने की आवश्यकता है। ?

उत्तर

22
public AccountService(ModelStateDictionary modelStateDictionary, string dataSourceID) 
    : this(dataSourceID) 
{ 
    this._modelState = modelStateDictionary; 

} 

यह पहले आपके अन्य निर्माता को कॉल करेगा। आप बेस कन्स्ट्रक्टर को कॉल करने के लिए base(... का भी उपयोग कर सकते हैं।

इस मामले में this निहित है।

6

हाँ, आप विकल्पों की एक जोड़ी है:)

1 सार आम आरंभीकरण तर्क किसी अन्य विधि में और फोन है कि प्रत्येक निर्माता से। आप इस पद्धति की आवश्यकता होगी अगर आप जिस क्रम में आइटम प्रारंभ कर रहे हैं (यानी अगर _modelState _accountRepository की आवश्यकता है यह बाद प्रारंभ करने के लिए) को नियंत्रित करने के लिए आवश्यक:

public AccountService(ModelStateDictionary modelStateDictionary, string dataSourceID) 
{ 
    this._modelState = modelStateDictionary; 
    Initialize(dataSourceID); 
} 

public AccountService(string dataSourceID) 
{ 
    Initialize(dataSourceID); 
} 

private void Initialize(string dataSourceID) 
{ 
    this._accountRepository = StorageHelper.GetTable<Account>(dataSourceID); 
    this._productRepository = StorageHelper.GetTable<Product>(dataSourceID); 
} 

2) कास्केड अंत में this जोड़कर कंस्ट्रक्टर्स:

public AccountService(ModelStateDictionary modelStateDictionary, string dataSourceID) : this(dataSourceID) 
{ 
    this._modelState = modelStateDictionary; 
} 

public AccountService(string dataSourceID) 
{ 
    this._accountRepository = StorageHelper.GetTable<Account>(dataSourceID); 
    this._productRepository = StorageHelper.GetTable<Product>(dataSourceID); 
} 
+0

केवल पुष्टि के लिए। इनमें से कौन सा "यह" शब्द अगर मैं हटा सकता हूं? –

+0

नहीं पूरी तरह से स्पष्ट है कि तुम क्या कह रहे हैं, लेकिन अगर आप 'this._' कोड के बारे में पूछ रहे हैं, तो आप उन सभी को निकाल सकते हैं। उदाहरण के लिए, 'this._accountRepository' को' _accountRepository' के रूप में भी लिखा जा सकता है। जिस 'मैं' का जिक्र कर रहा था वह कन्स्ट्रक्टर घोषणा के समान लाइन पर है (इसे देखने के दाईं ओर सभी तरह से स्क्रॉल करें)। –

+1

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