实现内部抽象成员

时间:2013-03-06 08:11:39

标签: f# mono

一个抽象类,在本例中是System.Reflection.MethodBase,需要实现整个接口,这很好。但它有这个抽象的成员:

internal abstract ParameterInfo[] GetParametersInternal ();

并且F#编译器抱怨:

  

没有为'MethodBase.GetParametersInternal()提供实现:   的ParameterInfo []'

如何实现我无法访问的内部成员?或者只是忽略它并实现公共成员。

如果我尝试强制覆盖:

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

我明白了:

  

未找到与此对应的抽象或接口成员   覆盖。

3 个答案:

答案 0 :(得分:4)

您可能正在尝试使用Type Providers构建F#3。 这是Mono 3.0.6中的一个错误: https://bugzilla.xamarin.com/show_bug.cgi?id=10884

两天前修复了它,所以只需等待3.0.7,除非你想自己编译Mono。

答案 1 :(得分:3)

您无法覆盖此内容 - 内部成员仅对同一程序集中的类型可见。 MethodBase在mscorlib中定义,因此GetParametersInternal仅对该程序集中的其他类型可见,而您的代码不是。

答案 2 :(得分: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 ""