我看了一些关于java内部匿名类的其他答案,但我正在寻找特定于C#的Xamarin实现的东西。需要帮助将Java移植到C# - 如何处理匿名内部类?
我正在努力将openCamera项目(http://opencamera.sourceforge.net/)从java移动到Xamarin的C#中。
我正在努力弄清楚处理java的匿名内部类的最佳方式。
的Java代码片断我的工作(许多之一)是这样的:
orientationEventListener = new OrientationEventListener(this) {
@Override
public void onOrientationChanged(int orientation) {
MainActivity.this.onOrientationChanged(orientation);
}
};
如何最能在Xamarin表示认可的C#代码?
如果我使用Tangible Software的Java to C#程序,它会创建一个名为“OrientationEventListenerAnonymousInnerClassHelper”的助手类 - 这很酷 - 不幸的是,它不能编译。我很乐意为此编写代码,但必须有一个可以逃脱我的方法。正如我所说,我会有很多。
代码有形软件生成这个样子的:
首先,它有一个using语句这样的声明是:
using OrientationEventListener = android.view.OrientationEventListener;
然后它创建了一个处理匿名内部类:
private class OrientationEventListenerAnonymousInnerClassHelper : OrientationEventListener
{
private readonly MainActivity outerInstance;
public OrientationEventListenerAnonymousInnerClassHelper(MainActivity outerInstance, net.opencamera.MainActivity this) : base(this)
{
this.outerInstance = outerInstance;
}
public override void onOrientationChanged(int orientation)
{
outerInstance.onOrientationChanged(orientation);
}
}
Xamarin工作室抱怨使用net.opencamera.MainActivity this
FWIW。
由于Java程序员喜欢他们匿名的内部类,我将会有很多这些工作要做。最佳做法是什么?
谢谢!
Aasmund(不知道是谁downvoted你的答案。希望人们会说为什么...)问题:虽然改变大量生成的代码并不好玩,但它似乎比首先更改大量的Java源代码更合理,因此它可以生成正确的代码... doesn'它呢?或者我错过了什么? – MarkJoel60 2015-02-10 12:39:52
我可以证实,使用'this'作为参数名称确实是一个错误 - 今天的转换器的构建将解决这个问题。 – 2015-02-10 15:35:16
新版本现在修复了这个问题。请注意,有些人更喜欢使用委托来转换匿名内部类 - 我们不这样做的原因是它无法处理更一般的复杂情况。 – 2015-02-10 16:29:48