첫 번째 예제에서는 속성에 액세스 할 때마다 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; }
}
속성 및 필드는 코딩의 관점에서 볼 때 비슷하지만 완전히 다르게 동작합니다. 속성은 실제로 한 쌍의 get/set 메서드에 대한 바로 가기이며 다른 메서드와 마찬가지로 본문은 호출 할 때마다 실행됩니다 .. – MattDavey