我希望将YouTubeAndroidPlayerApi.jar绑定到我的Xamarin Android项目中。我在我的Jars文件夹下添加了YouTubeAndroidPlayerApi.jar,但我的项目无法编译。
错误:“不要覆盖object.Finalize。而是使用析构函数。”
所以我试图通过使用:
来改变编译方式<attr path="/api/package[@name='Com.Google.Android.Youtube.Player']/class[@name='YouTubeThumbnailView']/method[@name='Finalize']" name="managedName">~YouTubeThumbnailView</attr>
在Transforms文件夹下的Metadata.xml文件中......虽然它似乎没有将它更改为终结器...我继续在这里使用语法,希望我偶然发现一些有效的东西
这是正确的做法吗?还有其他我可以做的是更好的解决方案吗?我真的很喜欢一些反馈。
谢谢!
答案 0 :(得分:3)
你应该能够相当容易地删除它。但是,您<attr>
中的问题是您的包名/类名不正确,因为它应遵循Java约定(<lowercase package>.<propercase class>
)。只需确保案例如下例所示:
<强> EX:强>
<remove-node path="/api/package[@name='com.google.android.youtube.player']/class[@name='YouTubeThumbnailView']/method[@name='finalize' and count(parameter)=0]" />
答案 1 :(得分:0)
如果添加remove-node
,则将删除finalizer
,并且将永远不会调用finalize
方法下的代码。
如果要在析构函数中重新使用finalize
实现,可以将以下内容添加到Metadata.xml
文件中:
<!--
YouTubeThumbnailView 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='com.google.android.youtube.player']/class[@name='YouTubeThumbnailView']/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='com.google.android.youtube.player']/class[@name='YouTubeThumbnailView']/method[@name='finalize' and count(parameter)=0]" name="visibility">internal</attr>
N.B。需要可视性修饰符才能删除override
修饰符。
然后,您应该在文件夹Additions
下添加以下类:
namespace Com.Google.Android.Youtube.Player
{
public partial class YouTubeThumbnailView
{
~YouTubeThumbnailView()
{
this.InternalFinalize();
}
}
}