2013-01-07 3 views
1

이것은 지연 초기화되는 필드 구문입니다.변경된 매개 변수가있는 지연 초기화 필드?

public class MyClass 
{ 
    string _cat; 
    public MyClass(string Category) 
    { 
     _cat=Category; 
    } 

    MyExpensive _expensive; 
    public MyExpensive Expensive 
    { 
     get 
     { 
      LazyInitializer.EnsureInitialized(ref _expensive,() = > new MyExpensive()); 
      return _expensive; 
     } 
    } 
} 

그러나 나는 런타임의 ctor의 PARAMSnew MyExpensive를 작성해야하는 경우?

때때로 new MyExpensive ("flowers")

어떻게 내가 플래그 필드를 만들 싶지 않아하고 많은의 내 말은 IF's

의 수행에, 가끔 new MyExpensive ("picture")을 실행해야하고 (흐름 논리에 따라) 그걸 할 수 있을까요?

(각 범주에 대한 게으른 필드를 생성 제외 -)

+0

문자열 값은 어떻게 받습니까? 호출자가 호출 한 경우에도 두 번째 호출에서 다른 값을 얻으면 무엇을 기대할 수 있습니까? –

+0

@JonSkeet 단 하나의 문자열 값 매개 변수 (내 경우에는) –

+0

하지만 실제로 내 질문 중 하나에 대답하지 않습니다 ... –

답변

2

당신은 아무것도에게 비싼을 수행하는 경우, 당신은 방법에없는 속성을 그것을해야한다. 이것은 대부분의 프로그래머에 의해 정상적인 기대 (적어도 경악의 원칙)와 같이

등록 빠른 저렴해야한다. 귀하의 경우에는

는 게터가없는 - 사용 :
public MyExpensive GetExpensive() 
{ 
    LazyInitializer.EnsureInitialized(ref _expensive,() = > new MyExpensive()); 
    return _expensive; 
} 

그리고 물론

, 당신은 매개 변수 과부하를 가지고 있습니다.

+0

Oded 여기서 ctor 매개 변수는 어디에 있습니까? –

+0

@RoyiNamir - 문자열 매개 변수를 사용하여 'ctor'에 전달하는 오버로드를 가질 수 있습니다. – Oded

+0

위의 편집 된 코드에 유의하십시오. 그것은 정말 어리석은 질문이었습니다. 나는 이렇게 할 수 있었고'new MyExpensive (_cat)'로 ctor를 실행할 수있었습니다. –