Xamarin Android 绑定(bind)不正确的方法覆盖名称

标签 xamarin xamarin.android

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 重命名为 RawHitProviderBaseRenderableSeries 的派生类正在尝试覆盖 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/

相关文章:

android - 当我在项目中部署 xamarin 表单应用程序时,我看到了 map ,但是当我将其放在 google play 上时, map 未加载

c# - Monodroid 设计器缺少设备配置

c# - Facebook v3 sdk monodroid 绑定(bind)

firebase - 错误 : package com. google.firebase.messaging 不存在

c++ - Windows下MonoDevelop中绑定(bind)c++静态库到项目

Android:我的应用程序中所有微调器的全局样式

c# - 在 Xamarin.Android 中向通知添加声音

android - Xamarin Android 菜单图标不显示

android - "Link Assemblies"任务意外失败问题,而应用程序在 Release模式 Xamarin Android 中构建

android - 将字节数组保存为android设备文件夹中的jpg文件