【问题标题】:Xamarin.Android binding generations for FinalizerFinalizer 的 Xamarin.Android 绑定生成
【发布时间】:2017-03-17 09:45:58
【问题描述】:

是否有适当的方法与终结器一起生成正确的xamarin.android 绑定?

我有使用API level 24 编译的原始 aar 库。这个库被添加到xamarin.android 绑定库项目中。 Xamarin 在首选项jdk1.8.0_91 中以JDK8 为目标。

原代码有protected void finalize()方法,所以生成的代码如下:protected override unsafe void Finalize ()

导致以下错误:"Do not override object.Finalize. Instead, provide a destructor."

除了在 xamarin 端使用 Metadata.xml 中的 <remove-node> 标记从生成中删除该 finalize 方法之外,是否有任何建议可以省略?

【问题讨论】:

标签: android xamarin xamarin.android


【解决方案1】:

您应该通过以下方式简单地删除 finalize 方法:

<remove-node path="/api/package[@name='your.package.name']/class[@name='Proper.ClassName']/method[@name='finalize' and count(parameter)=0]" />

【讨论】:

    【解决方案2】:

    如果添加remove-node,则会删除finalizer,并且永远不会调用finalize 方法下的代码。 如果您想在析构函数中重用 finalize 实现,可以将以下内容添加到您的 Metadata.xml 文件中:

    <!--  
        ClassName class implemented a Java Finalizer. I have to implement a C# Destructor and call the finalize method.
        The C# Destructor is in the partial class under the Addition folder.
    -->
    <!-- I change the name of the finalizer method to avoid the conflict with java finalizer -->
    <attr path="/api/package[@name='your.package.name']/class[@name='ClassName']/method[@name='finalize' and count(parameter)=0]" name="managedName">InternalFinalize</attr>
    <!-- I replace the protected override modifier with the internal modifier -->
    <attr path="/api/package[@name='your.package.name']/class[@name='ClassName']/method[@name='finalize' and count(parameter)=0]" name="visibility">internal</attr>
    

    注意需要可见性修饰符才能删除 override 修饰符。

    那么你应该在Additions文件夹下添加如下类:

    namespace Your.Package.Name
    {
        public partial class ClassName
        {
            ~ClassName()
            {
                this.InternalFinalize();
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2016-01-10
      • 2014-07-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-21
      • 1970-01-01
      • 2014-05-30
      • 1970-01-01
      相关资源
      最近更新 更多