1

抽象クラス(この場合はSystem.Reflection.MethodBase)は、インターフェイス全体の実装を必要としますが、これは問題ありません。しかし、この抽象的なメンバーがあります。

internal abstract ParameterInfo[] GetParametersInternal ();

そしてF#コンパイラは文句を言います:

'MethodBase.GetParametersInternal():ParameterInfo[]'の実装はありませんでした

アクセスできないこの内部メンバーを実装するにはどうすればよいですか?または、これを無視してパブリックメンバーを実装します。

オーバーライドを強制しようとした場合:

override this.GetParametersInternal() = parameters |> List.toArray

私は得る:

このオーバーライドに対応する抽象またはインターフェイスメンバーが見つかりませんでした。

4

3 に答える 3

4

タイプ プロバイダーを使用して F# 3 をビルドしようとしている可能性があります。これは Mono 3.0.6 のバグです: https://bugzilla.xamarin.com/show_bug.cgi?id=10884

これはわずか 2 日前に修正されたので、Mono を自分でコンパイルしたい場合を除き、3.0.7 までお待ちください。

于 2013-03-06T22:18:09.320 に答える
3

このメンバーをオーバーライドすることはできません。内部メンバーは、同じアセンブリ内のタイプにのみ表示されます。MethodBaseはmscorlibで定義されているためGetParametersInternal、そのアセンブリ内の他のタイプにのみ表示されますが、コードは表示されません。

于 2013-03-06T09:51:46.227 に答える
1

リーが言ったように、別のアセンブリから内部メンバーをオーバーライドすることはできません。基本的な継承を行うときにコンパイラ エラーは表示されません。以下は正常にコンパイルされます。

type MyMethodBase() = 
    inherit System.Reflection.MethodBase()
    override this.Attributes with get () = failwith ""
    override this.GetMethodImplementationFlags() = failwith ""
    override this.GetParameters() = failwith ""
    override this.Invoke(obj, invokeAttr, binder, parameters, culture) = failwith ""
    override this.MethodHandle with get() = failwith ""
    override this.DeclaringType with get() = failwith ""
    override this.GetCustomAttributes(attributeType, inh) = failwith ""
    override this.GetCustomAttributes(b) = failwith ""
    override this.IsDefined(attributeType, inh) = failwith ""
    override this.MemberType with get() = failwith ""
    override this.Name with get() = failwith ""
    override this.ReflectedType with get() = failwith ""
于 2013-03-06T21:15:20.693 に答える