2014-04-27 4 views
5

क्या किसी प्रकार के क्षेत्र/संपत्ति को एक आलसी होने के लिए पुन: सक्रिय करने का कोई आसान तरीका है, और उस क्षेत्र के सभी उपयोगों को फ़ील्डनाम का उपयोग करने के लिए प्रतिस्थापित करें। इसके बजाय वैल्यू?रिजर्वर रिफाएक्टर फ़ील्ड प्रकार टी के लिए आलसी <T>

मेरे पास निजी बैकिंग फ़ील्ड्स में संग्रहीत निर्भरताओं के समूह के साथ एक नियंत्रक है, लेकिन किसी दिए गए फ़ंक्शन कॉल पर केवल कुछ निर्भरताओं की आवश्यकता है। इस नियंत्रक के निर्माण को तेज करने के लिए, मैं सभी निर्भरताओं को आलसी बनाना चाहता हूं, लेकिन यह हाथ से करने के लिए सिर्फ एक परेशान काम है। कोई सलाह?

+2

मुझे लगता है कि सबसे आसान अगर यह एक संपत्ति के लिए एक क्षेत्र, refactor है। फिर, गेटटर में, बैकिंग फ़ील्ड को 'आलसी ' में बदलें और उस गेटटर में इसकी 'वैल्यू' प्रॉपर्टी वापस करें। यानी इसके लिए एक विशिष्ट रिफैक्टरिंग नहीं है। –

उत्तर

4
  1. Tools>Create GUID

  2. Resharper>Refactor>Rename

    फू =>Foo_299E4ADB-5770-458C-B030-E40E19B0FFAF

  3. Edit>Find and Replace>Replace in Files

    _299E4ADB-5770-458C-B030-E40E19B0FFAF =>.Value

2

यदि आप पहले किया था,

public class LazyClass 
{ 
// initialized in constructor etc. 
public MyType MyTypeProperty { get; set; } 
} 

तो आप इसके आलसी लोड कर सकते हैं, इस प्रकार कॉल को प्रभावित किए बिना:

public class LazyClass 
{ 
private Lazy<MyType> myType = new Lazy<MyType>(() => new MyType()); 

public MyType MyTypeProperty 
{ 
    get { return this.myType.Value; } 
} 
} 

मैं शक करता है, तो Resharper यह फिर से फैक्टरिंग में बनाया गया है। वैसे भी, आप नहीं चाहते कि सभी कॉलर्स यह जान सकें कि यह आलसी है और इसे LazyType.Value के रूप में देखें। आलसी प्रकार का पर्दाफाश न करें।

+0

स्पष्टीकरण के लिए, जिन क्षेत्रों में मैं बदल रहा हूं वे वर्ग के लिए निजी हैं, इसलिए मुझे लगता है कि उन्हें शुद्ध आलसी होना चाहिए और संपत्ति एक्सेसर द्वारा लिपटे नहीं हैं। अगर मुझे बाहरी गुण होते, तो मैं पूरी तरह से इस विधि का उपयोग करता। – hermitt

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