在第一個示例中,每次訪問屬性時都會調用LoadSearchList()。
第二,LoadSearchList()只會被調用一次(但它將被調用,無論您是否使用它,因爲它現在是一個字段而不是屬性)。
一個更好的選擇可能是:
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; }
}
屬性和字段的行爲完全不同,儘管從編碼的角度看它們可能看起來很相似。一個屬性實際上只是一對獲取/設置方法的快捷方式,並且與任何方法一樣,每次調用時都會執行該正文。 – MattDavey 2011-03-18 15:25:14