2013-03-06 101 views
1

一個抽象類,在本例中是System.Reflection.MethodBase,需要實現整個接口,這很好。但是它有這個抽象成員:實現一個內部抽象成員

internal abstract ParameterInfo[] GetParametersInternal(); 

和F#編譯器抱怨:

沒有執行被賦予了 'MethodBase.GetParametersInternal(): 的ParameterInfo []'

如何我可以執行此內部成員嗎?我無法訪問該內部成員?或者只是忽略這一點,並實施公衆成員。

如果我試圖強行超越:

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

我得到:

沒有抽象或接口成員發現,對應於此 覆蓋。

回答

3

你可能會試圖建立F#3型供應商。 這是單聲道3.0.6中的錯誤: https://bugzilla.xamarin.com/show_bug.cgi?id=10884

這只是兩天前固定的,所以就等着3.0.7,除非你想自己編譯單。

+0

是的,我正在使用類型提供程序。是的,它發生在3.0.6。謝謝。 – rozgo 2013-03-06 22:50:58

3

您無法覆蓋此標記 - 內部成員只能在同一個程序集中的類型中看到。 MethodBase在mscorlib中定義,因此GetParametersInternal只對該程序集中的其他類型可見,而您的代碼不是。

1

像Lee說的那樣,你不應該能夠從另一個程序集中覆蓋內部成員。做基本的繼承時,我沒有看到任何編譯器錯誤 - 下面編譯罰款:

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 ""