객체 초기화 구문


99

방금 F #으로 시작했는데 C # 3에서와 같이 개체 초기화를 수행하는 구문을 찾을 수 없습니다.

즉 다음과 같습니다.

public class Person {
  public DateTime BirthDate { get; set; }
  public string Name { get; set; }
}

F #에서 다음을 어떻게 작성합니까?

var p = new Person { Name = "John", BirthDate = DateTime.Now };

답변:


137

다음과 같이 할 수 있습니다.

let p = new Person (Name = "John", BirthDate = DateTime.Now)

관습 적으로 new 는 일회용 클래스에서만 사용됩니다.
ShawnMartin

98

CMS의 대답은 확실히 맞습니다. 다음은 도움이 될 수있는 추가 사항입니다. F #에서는 종종 변경 불가능한 속성을 사용하여 형식을 작성하려고합니다. "개체 이니셜 라이저"구문을 사용하는 경우 속성은 변경 가능해야합니다. F #의 대안은 명명 된 인수를 사용하는 것입니다. 이는 유사한 구문을 제공하지만 변경 불가능하게 유지합니다.

type Person(name:string, ?birthDate) =
  member x.Name = name
  member x.BirthDate = defaultArg birthDate System.DateTime.MinValue

이제 다음과 같이 작성할 수 있습니다.

let p1 = new Person(name="John", birthDate=DateTime.Now)
let p2 = new Person(name="John")

코드에는 이름을 지정해야하지만 생일은 일부 기본값이있는 선택적 인수입니다.


감사합니다 Tomas,하지만 제 경우에는 Person이 다른 어셈블리에 있고 변경할 수 없습니다. (
Mauricio Scheffer

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.