質問

基本クラス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

はい、それは少し面倒ですが、ブライアンが言ったように、それは大多数のケースではありません。

編集: 実際、class / endキーワードはそのために必須ではありません(だから、面倒さについて言ったことを取り戻します)。 ブライアンが彼のブログでこちらで言ったように、F#は通常定義されている種類の種類、これらのトークンを不要/冗長にします。

type D =
    inherit B

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

他のヒント

ドキュメントから:"基本クラスコンストラクターの引数は、inherit節の引数リストに表示されます。"例:

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

F#では、すべてのコンストラクターが" primary"コンストラクター(プライマリコンストラクターの引数はクラス全体のスコープ内にあるため、初期化する必要があります)。あなたの場合、基本クラスには最大のコンストラクタがあるため、それを回避できます:

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