是否有正确的方法与终结器一起生成正确的xamarin.android
绑定?
我有原始的aar lib,用API level 24
编译。此lib已添加到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."
是否有任何建议如何省略这一点,除了使用<remove-node>
中的Metadata.xml
标记从xamarin一侧生成finalize方法?
答案 0 :(得分:0)
您应该通过以下方式删除finalize
方法:
<remove-node path="/api/package[@name='your.package.name']/class[@name='Proper.ClassName']/method[@name='finalize' and count(parameter)=0]" />
答案 1 :(得分:0)
如果添加 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();
}
}
}