我为altbeacon阅读了以下示例,该示例编写为Java(http://altbeacon.github.io/android-beacon-library/samples.html)。我必须将代码翻译成c#..
@Override
public void onBeaconServiceConnect() {
beaconManager.setMonitorNotifier(new MonitorNotifier() {
@Override
public void didEnterRegion(Region region) {
Log.i(TAG, "I just saw an beacon for the first time!");
}
@Override
public void didExitRegion(Region region) {
Log.i(TAG, "I no longer see an beacon");
}
@Override
public void didDetermineStateForRegion(int state, Region region) {
Log.i(TAG, "I have just switched from seeing/not seeing beacons: "+state);
}
});
try {
beaconManager.startMonitoringBeaconsInRegion(new Region("myMonitoringUniqueId", null, null, null));
} catch (RemoteException e) { }
}
我这样开始现在我在传递接口参数时遇到了问题,就像在上面提到的例子中那样..
public void OnBeaconServiceConnect()
{
beaconManager.SetMonitorNotifier(...)
}
有人可以解释如何将代码翻译成c#?
答案 0 :(得分:1)
我认为你真正的问题是"是否有相当于C#中的匿名类?"。答案是否定的。
看看Java: Interface with new keyword how is that possible?。 Java支持定义在方法中实现接口的匿名类。在定义实现接口的私有类时,它只是语法糖(或盐,取决于对此功能的看法)。
因此,将此代码转换为C#时的解决方案是创建一个私有内部类并在方法中使用它:
class SomeClass
{
...
public void OnBeaconServiceConnect()
{
beaconManager.SetMonitorNotifier(new MonitorNotifier());
...
}
...
private MonitorNotifier : IMonitorNotifier
{
public void didEnterRegion(Region region)
{
Log.i(TAG, "I just saw an beacon for the first time!");
}
public void didExitRegion(Region region)
{
Log.i(TAG, "I no longer see an beacon");
}
public void didDetermineStateForRegion(int state, Region region)
{
Log.i(TAG, "I have just switched from seeing/not seeing beacons: "+state);
}
}
}
答案 1 :(得分:0)
匿名类无法在C#中实现接口。 所以不要在这里使用匿名类:
public class MyMonitorNotifier : MonitorNotifier {
...
}
然后:
beaconManager.SetMonitorNotifier(new MyMonitorNotifier ());