7

継承元のクラス(C#)の保護されたメソッドを呼び出す拡張型(F#)の次のコードがありますが、例外が発生します(以下を参照)。これに対する回避策はありますか?

let getPagereference id =
    this.ConstructPageReference(id)

メンバーまたはオブジェクトのコンストラクター'ConstructPageReference'にアクセスできません。プライベートメンバーは、宣言タイプ内からのみアクセスできます。保護されたメンバーは、拡張型からのみアクセスでき、内部ラムダ式からはアクセスできません。

アップデート:

フォローしてみましたが、同じ結果になりました

let getPagereference id =
    base.ConstructPageReference(id)

アップデート2(解決策):

そのままのコードは次のとおりです。

type MyNewType() =
    inherit SomeAbstractType()

    let getPagereference id =
        base.ConstructPageReference(id)

    override this.SomeMethod()=
       let id = 0
       let pr = getPagereference id

これが本来あるべき姿です。

type MyNewType() =
    inherit SomeAbstractType()

    member this.ConstructPageReference(id) =
        base.ConstructPageReference(id)

    override this.SomeMethod()=
       let id = 0
       let pr = this.ConstructPageReference(id)
4

2 に答える 2

8

重要な部分は、内部ラムダ式からアクセスできないことだと思います。おそらくラムダ内からアクセスしようとしています。

やってみました

member this.getPagereference(id) = 
    this.ConstructPageReference(id) 
于 2010-03-02T21:16:19.053 に答える
8

Gabeは正しいです。あなたのコード:

let getPagereference id =
  this.ConstructPageReference(id)

と同じです

let getPagereference = fun id ->
  this.ConstructPageReference(id)

したがって、ラムダ式内からベースメソッドを暗黙的に呼び出そうとしています。これは、let-bound関数ではなく、メンバーから行う必要があります。

于 2010-03-02T21:33:09.683 に答える