2013-07-15 2 views
1

죄송합니다. 기본이지만 아직 F #에서 머리를 감싸고 있습니다.F # 생성자에서 속성 값에 액세스

나는이 작업을 수행 할 수 :

type Person(user:User) as this = 
    member val Name = "" with get, set 
    user.UserId <- this.Name 

그러나 그것은 나에게 오류 Unexpected identifier in member definition을 제공합니다.

type Person(user:User) as this = 
    do 
     user.UserId <- this.Name 
    member val Name = "" with get, set 

를하지만 나에게 런타임에 InvalidOperationException을 제공합니다

이 컴파일합니다.

type Person(user:User) = 
    member val Name = "" with get, set 

    member this.Setup() = 
     user.UserId <- this.Name 

하지만 때마다 person.Setup()를 호출하는 것을 좋아하지 않는다 :

나는 이것에 대한 해결했습니다.

가장 좋은 F- 날카로운 방법은 무엇입니까? 다음과 같이

답변

4
당신은 멤버 함수를 초기화하는 코드를 강제로 명시 적으로 생성자를 사용하여이 작업을 수행 할 수

는 다른 코드 앞에 실행되도록

type User() = 
    member val UserId = "" with get,set 
type Person private() = 
    member val Name = "" with get, set 
    new (user:User) as this = 
     Person() 
     then user.UserId <- this.Name 

이는 초기화 코드가 실행되기 때문입니다 따라서 생성자를 완료해야만 속성에 액세스 할 수 있습니다.

+0

이렇게 할 수있는 두 번째 생성자 (User 객체에서 전달) 만 호출 할 수 있습니까? 즉, 첫 번째 (명시 적) 생성자를 비공개로 만드는 방법은 무엇입니까? –

+0

@KenSmith - 가능합니다 - 업데이트 된 답변보기 –

+0

Thank you! 감사합니다. –

관련 문제