F #의 레코드와 유사한 클래스 인스턴스 초기화

베드로

F #의 레코드 유형을 사용하면 다음과 같은 구문을 사용하여 다른 레코드를 기반으로 레코드를 초기화 할 수 있습니다.

let rr3 = { defaultRecord1 with field2 = 42 }

비 레코드 유형에도 비슷하게 간결하고 우아한 것이 있습니까?

나는 C # 클래스로 작업하고 있으며 해당 Clone()메서드를 호출하고 <-연산자를 사용하여 속성에 할당을 수행하는 중 입니다. 객체 표현식 에 대한이 기사도 찾았 지만 제가 찾던 것이 아닌 것 같습니다.

편집 : 그래서 요약하면 내 F # 코드에서 C # 클래스를 인스턴스화하려고하는데 F #의 레코드와 마찬가지로 다른 개체의 값을 기반으로 클래스의 개체를 생성하는 간결한 구문이 있는지 궁금합니다. with예어.

Tarmil

실제로 메서드 호출에서 설정 가능한 속성을 이름이 지정된 인수 인 것처럼 사용할 수 있습니다. 따라서 클래스가 Clone원래 유형을 반환 하는 전용 메서드 로 구현 된 경우 :

type Foo() =
    member val X = 0 with get, set
    member val Y = 0 with get, set
    member this.Clone() = new Foo(X = this.X, Y = this.Y)
    interface System.ICloneable with
        member this.Clone() = box (this.Clone())

그러면 다음을 수행 할 수 있습니다.

let foo1 = new Foo(X = 1, Y = 2)
let foo2 = foo1.Clone(X = 3)

그러나 대부분의 경우 클래스에는 ICloneable구현 만 있습니다 . 이 경우 위의 트릭은 설정 가능한 속성 이없는 ICloneable.Clone반환 때문에 즉시 작동 obj하지 않습니다 X. 다행히 필요한 방법을 확장으로 추가 할 수 있습니다.

/// Original class
type Foo() =
    member val X = 0 with get, set
    member val Y = 0 with get, set
    interface System.ICloneable with
        member this.Clone() = box (new Foo(X = this.X, Y = this.Y))

let foo1 = new Foo(X = 1, Y = 2)
let foo2 = foo1.Clone(X = 3) // error FS0039: The field, constructor or member 'Clone' is not defined
let foo3 = (foo1 :> System.ICloneable).Clone(X = 3) // error FS0495: The member or object constructor 'Clone' has no argument or settable return property 'X'. The required signature is System.ICloneable.Clone() : obj.

/// Extension that makes the above trick work
type Foo with
    member this.Clone() = (this :> System.ICloneable).Clone() :?> Foo

let foo1 = new Foo(X = 1, Y = 2)
let foo2 = foo1.Clone(X = 3) // works!

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

기존 객체와 동일한 유형의 클래스 인스턴스 생성

분류에서Dev

기존 객체와 동일한 유형의 클래스 인스턴스 생성

분류에서Dev

클래스의 인스턴스에 대한 스마트 포인터 초기화 및 해당 메서드에 액세스

분류에서Dev

SKSpriteNode의 적절한 서브 클래 싱 및 인스턴스 초기화

분류에서Dev

클래스 인스턴스화와 호출 가능한 클래스 함수 호출의 차이점

분류에서Dev

Dart-클래스 인스턴스화와 호출 가능한 클래스 함수 호출의 차이점

분류에서Dev

인스턴스 속성의 지연 초기화와 함께 mypy 사용

분류에서Dev

Assets 클래스 외부에서 starling의 사운드 초기화

분류에서Dev

클래스의 인스턴스화에 사용 된 모든 유형을 찾기위한 테스트 작성

분류에서Dev

프로토콜 인스턴스로 변수 캐스트가 클래스 인스턴스의 변수와 동일한 기본 유형이 아닙니까?

분류에서Dev

클래스 인스턴스의 포인터를 사용한 초기화가 C ++에서 유일한 것입니까?

분류에서Dev

Android : 초기화시 동일한 앱에 대한 두 개의 Aplication 클래스 인스턴스

분류에서Dev

setter가 private 인 속성을 사용하여 C # 클래스의 인스턴스를 만드는 방법 .. from F #

분류에서Dev

Haskell 유형 클래스의 부분 인스턴스화

분류에서Dev

메서드를 통해 클래스의 새 인스턴스를 초기화합니다.

분류에서Dev

한 번에 클래스 정의 및 인스턴스화

분류에서Dev

다른 클래스에서 한 클래스의 인스턴스 만들기

분류에서Dev

단일 클래스와 함께 데코레이터를 사용하는 NodeJS는 초기화 후 클래스의 상태를 저장하지 않습니다.

분류에서Dev

양식 코드에서 클래스의 공용 인스턴스를 인스턴스화 할 수 없습니다.

분류에서Dev

양식 코드에서 클래스의 공용 인스턴스를 인스턴스화 할 수 없습니다.

분류에서Dev

수퍼 클래스에서 서브 클래스의 클래스 인스턴스 변수 초기화

분류에서Dev

클래스의 인스턴스 찾기

분류에서Dev

기본 클래스의 인스턴스를 사용하여 파생 데이터 클래스를 초기화 할 수 있습니까?

분류에서Dev

기본 클래스에서 벡터의 깨끗한 인스턴스화

분류에서Dev

Scala에서 동반 객체의 apply 메소드에서 클래스의 하위 유형 인스턴스화

분류에서Dev

파생 클래스를 인스턴스화하는 기본 클래스의 팩토리 메서드

분류에서Dev

F #에서 C #으로 내부 식별 통합의 인스턴스 초기화

분류에서Dev

사용자 정의 초기화 메소드가있는 SKNode 서브 클래스

분류에서Dev

Mockito : 클래스의 모든 인스턴스에 대한 모의 인스턴스 메소드

Related 관련 기사

  1. 1

    기존 객체와 동일한 유형의 클래스 인스턴스 생성

  2. 2

    기존 객체와 동일한 유형의 클래스 인스턴스 생성

  3. 3

    클래스의 인스턴스에 대한 스마트 포인터 초기화 및 해당 메서드에 액세스

  4. 4

    SKSpriteNode의 적절한 서브 클래 싱 및 인스턴스 초기화

  5. 5

    클래스 인스턴스화와 호출 가능한 클래스 함수 호출의 차이점

  6. 6

    Dart-클래스 인스턴스화와 호출 가능한 클래스 함수 호출의 차이점

  7. 7

    인스턴스 속성의 지연 초기화와 함께 mypy 사용

  8. 8

    Assets 클래스 외부에서 starling의 사운드 초기화

  9. 9

    클래스의 인스턴스화에 사용 된 모든 유형을 찾기위한 테스트 작성

  10. 10

    프로토콜 인스턴스로 변수 캐스트가 클래스 인스턴스의 변수와 동일한 기본 유형이 아닙니까?

  11. 11

    클래스 인스턴스의 포인터를 사용한 초기화가 C ++에서 유일한 것입니까?

  12. 12

    Android : 초기화시 동일한 앱에 대한 두 개의 Aplication 클래스 인스턴스

  13. 13

    setter가 private 인 속성을 사용하여 C # 클래스의 인스턴스를 만드는 방법 .. from F #

  14. 14

    Haskell 유형 클래스의 부분 인스턴스화

  15. 15

    메서드를 통해 클래스의 새 인스턴스를 초기화합니다.

  16. 16

    한 번에 클래스 정의 및 인스턴스화

  17. 17

    다른 클래스에서 한 클래스의 인스턴스 만들기

  18. 18

    단일 클래스와 함께 데코레이터를 사용하는 NodeJS는 초기화 후 클래스의 상태를 저장하지 않습니다.

  19. 19

    양식 코드에서 클래스의 공용 인스턴스를 인스턴스화 할 수 없습니다.

  20. 20

    양식 코드에서 클래스의 공용 인스턴스를 인스턴스화 할 수 없습니다.

  21. 21

    수퍼 클래스에서 서브 클래스의 클래스 인스턴스 변수 초기화

  22. 22

    클래스의 인스턴스 찾기

  23. 23

    기본 클래스의 인스턴스를 사용하여 파생 데이터 클래스를 초기화 할 수 있습니까?

  24. 24

    기본 클래스에서 벡터의 깨끗한 인스턴스화

  25. 25

    Scala에서 동반 객체의 apply 메소드에서 클래스의 하위 유형 인스턴스화

  26. 26

    파생 클래스를 인스턴스화하는 기본 클래스의 팩토리 메서드

  27. 27

    F #에서 C #으로 내부 식별 통합의 인스턴스 초기화

  28. 28

    사용자 정의 초기화 메소드가있는 SKNode 서브 클래스

  29. 29

    Mockito : 클래스의 모든 인스턴스에 대한 모의 인스턴스 메소드

뜨겁다태그

보관