आपके पहले उदाहरण में, लोडशर्चलिस्ट() को प्रत्येक बार संपत्ति का उपयोग करने के लिए बुलाया जाएगा।
दूसरे में, लोडशर्चलिस्ट() को केवल एक बार बुलाया जाएगा (लेकिन यह कहा जाएगा कि आप इसका उपयोग करते हैं या नहीं, क्योंकि यह अब संपत्ति के बजाय एक क्षेत्र है)।
एक बेहतर विकल्प हो सकता है:
private static IEnumerable<string> _searchWordList;
public static IEnumerable<string> SearchWordList
{
get
{
return _searchWordList ??
(_searchWordList = DataTools.LoadSearchList());
}
}
या आप .NET 4.0 उपयोग कर रहे हैं और कुछ धागे की सुरक्षित आप Lazy<T>
उपयोग कर सकते हैं चाहते हैं, के रूप में जॉन स्कीट उल्लेख किया (मुझे लगता है कि वाक्य रचना सही होना चाहिए, लेकिन मुझे इसे पकड़ न दें):
private static Lazy<IEnumerable<string>> _searchWordList =
new Lazy<IEnumerable<string>>(() => DataTools.LoadSearchList());
public static IEnumerable<string> SearchWordList
{
get { return _searchWordList.Value; }
}
स्रोत
2011-03-18 15:21:54
गुण और फ़ील्ड पूरी तरह अलग तरीके से व्यवहार करते हैं, भले ही वे कोडिंग बिंदु से समान दिखाई दे सकें। एक संपत्ति वास्तव में प्राप्त/सेट विधियों की एक जोड़ी के लिए एक शॉर्टकट है, और किसी भी विधि की तरह, प्रत्येक बार जब आप इसे कॉल करते हैं तो शरीर को निष्पादित किया जाएगा .. – MattDavey