문제

기본 클래스 B (C#로 작성)와 기본 클래스 암시 적 생성자 이외의 생성자를 상속하는 유형 D를 코딩하기위한 적절한 구문을 찾을 수 없습니다.

C# 코드 :

public class B
{
    private int _i;
    private float _f;
    public B()
    {
        _i = 0;
        _f = 0.0f;
    }
    public B(int i)
    {
        _i = 0;
        _f = 0.0f;
    }
    public B(int i, float f)
    {
        _i = i;
        _f = f;
    }
}

F# 코드 :

type D() =
    inherit B()
    //how to inherit from other constructors ?

감사

도움이 되었습니까?

해결책

나는 그것을 할 수있는 방법을 찾았다 블로그 !

type D =
    class
        inherit B

        new () = {
            inherit B()
        }
        new (i : int) = {
            inherit B(i)
        }
        new ((i,f) : int*single) = {
            inherit B(i, f)
        }
    end

그렇습니다. 약간 번거롭지 만 Brian이 대부분의 경우가 아니라고 말했습니다.

편집 : 실제로, 클래스/종료 키워드는 그에 대한 필수가 아닙니다. 브라이언이 블로그에서 말했듯이 여기, f#는 일반적으로 정의되는 유형의 종류를 유추하여 이러한 토큰을 불필요/중복으로 만듭니다.

type D =
    inherit B

    new () = {
        inherit B()
    }
    new (i : int) = {
        inherit B(i)
    }
    new ((i,f) : int*single) = {
        inherit B(i, f)
    }

다른 팁

문서에서 : "기본 클래스 생성자에 대한 인수는 상속 절의 인수 목록에 나타납니다." 예를 들어:

type D(i: int) =
   inherit B(i)

F#은 모든 생성자가 "1 차"생성자를 통과해야하기 때문에 다른 F# 생성자에서 다른 기본 클래스 생성자를 호출 할 수 있는지 확실하지 않습니다 (기본 생성자 인수는 전체 클래스의 범위에 있으므로 초기화되어야합니다. ). 귀하의 경우, 기본 클래스에 최대 생성자가 있으므로이를 벗어날 수 있습니다.

type D(i : int, f : float) =
  inherit B(i, f)
  new(i : int) = D(i, 0.0)
  new() = D(0, 0.0)

그러나 최대 생성자가없는 기본 클래스의 경우 이것이 가능하지는 않습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top