2010-12-11 8 views
17
public class myClass 
{ 
    public myClass(String InstanceName) 
    { 
     Name = InstanceName; 
    } 
    public String Name { get; set; } 
} 

// Now using myClass lazily I have: 

Lazy<myClass> myLazy; 
Console.WriteLine(myLazy.Value.Name); 

मेरा प्रश्न है आरंभ कैसे InstanceNamemyClass निर्माता को जब हम एक आलसी उदाहरण का उपयोग कर रहे पारित करने के लिए?पास पैरामीटर, जब एक आलसी उदाहरण

उत्तर

25

इस प्रयास करें:

Lazy<myClass> myLazy = new Lazy<myClass>(() => new myClass(InstanceName)); 

, याद रखें, इसलिए यदि आप चर InstanceName का मूल्य से पहले निर्माता यह आप क्या उम्मीद करते नहीं हो सकता है कहा जाता है को बदलने कि अभिव्यक्ति lazily मूल्यांकन किया जाता है।

+0

और एक ही साथ दूसरे अधिभार का उपयोग करना चाहिए 'InstanceName' मैं कैश से वस्तु प्राप्त होगा? – Xaqron

1

आप नहीं कर सकते, Lazy<T> को पैरामीटर रहित कन्स्ट्रक्टर की आवश्यकता है। आप Lazy<T>(Func<T>) कन्स्ट्रक्टर का उपयोग कर सकते हैं, हालांकि, क्लास को प्रारंभ करने वाली विधि के साथ।

8

आलसी के आरंभ करने के दो तरीके हैं। पहला टी का डिफॉल्ट सीटीओआर (पैरामीटरलेस)

दूसरा दूसरा फ़ंक्शन स्वीकार कर रहा है जिसमें ग्राहक प्रारंभिक तर्क है। आप यहाँ उल्लेख किया

http://msdn.microsoft.com/en-us/library/dd642329.aspx