Xamarin.Android 绑定(bind)中存在一个相当奇怪的问题。我有一个java类定义如下:
// Java world
public abstract class BaseRenderableSeries<TX extends Comparable<TX>,
TY extends Comparable<TY>,
TRenderPassData extends ISeriesRenderPassData,
TDataSeries extends IDataSeries<TX, TY>>
implements IRenderableSeries {
// ...
protected abstract IHitProvider<? super TRenderPassData> getHitProvider();
// ...
}
Java 中的派生类重写 getHitProvider
,如下所示:
public class FastLineRenderableSeries<TX extends Comparable<TX>, TY extends Comparable<TY>> extends XyRenderableSeriesBase<TX, TY, LineRenderPassData> {
@Override
protected IHitProvider<? super LineRenderPassData> getHitProvider() {
return new CompositeHitProvider<>(
new PointMarkerHitProvider(),
new LineHitProvider());
}
}
在 Xamarin.Android 中,绑定(bind)是这样生成的:
// Generated C# Binding in BaseRenderableSeries.cs
//
protected abstract global::Com.Scichart.Charting.Visuals.RenderableSeries.HitTest.IHitProvider RawHitProvider {
// Metadata.xml XPath method reference: path="/api/package[@name='com.scichart.charting.visuals.renderableSeries']/class[@name='BaseRenderableSeries']/method[@name='getHitProvider' and count(parameter)=0]"
[Register ("getHitProvider", "()Lcom/scichart/charting/visuals/renderableSeries/hitTest/IHitProvider;", "GetGetHitProviderHandler")] get;
}
Que? 该属性已从 HitProvider
重命名为 RawHitProvider
。 BaseRenderableSeries
的派生类正在尝试覆盖 HitProvider
,这会导致构建错误。
// Generated bindings in FastLineRenderableSeries.cs
protected override unsafe global::Com.Scichart.Charting.Visuals.RenderableSeries.HitTest.IHitProvider HitProvider {
// Metadata.xml XPath method reference: path="/api/package[@name='com.scichart.charting.visuals.renderableSeries']/class[@name='FastLineRenderableSeries']/method[@name='getHitProvider' and count(parameter)=0]"
[Register ("getHitProvider", "()Lcom/scichart/charting/visuals/renderableSeries/hitTest/IHitProvider;", "GetGetHitProviderHandler")]
get {
// ...
}
}
}
FastLineRenderableSeries.HitProvider
: no suitable method to override
知道为什么吗? Xamarin 在这里做什么以及如何防止它的疯狂行为?
最佳答案
那是因为不支持泛型。也许生成器试图避免可能存在的名称冲突。
选项a)
尝试更改基类中Property的名称
<attr path="/api/package[@name='com.scichart.charting.visuals.renderableSeries']/class[@name='BaseRenderableSeries']/method[@name='getHitProvider' and count(parameter)=0]"
name="managedName">HitProvider</attr>
选项b)
更改子类中的属性名称
<attr path="/api/package[@name='com.scichart.charting.visuals.renderableSeries']/class[@name='FastLineRenderableSeries']/method[@name='getHitProvider' and count(parameter)=0]"
name="managedName">RawHitProvider</attr>
关于Xamarin Android 绑定(bind)不正确的方法覆盖名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37014401/