2013-04-10 37 views
3

我正在移植Windows Mobile上的一些旧代码。代码为.NET 3.5 CE编译得很好。我在MonoForAndroid中创建了一个项目,并引用了相同的代码(以链接形式引用的.cs文件),并且它适用于Android。在Windows,MonoForAndroid和MonoTouch上实现界面的差异

但是,当我为MonoTouch创建项目并引用了相同的C#代码文件时,它无法构建抛出错误,指出未实现方法。

以下是我有:

public interface IJobController 
{ 
    IUser User {get; } 
} 

public class BaseController 
{ 
    public virtual IUser User {get;set;} 
} 


public class BaseJobController : BaseController 
{ 
    public new User User {get;set;} 
} 

public class JobController : BaseJobController, IJobController 
{ 
    // some code here that uses the User property 
} 

错误说IUser User { get;}的候选者是一个在BaseJobController,但类型不匹配IUserUserJobController不实现方法。

这个相同的代码已经在Windows Mobile .NET 3.5 CE上工作了很多年,并且相同的代码在MonoForAndroid上编译得很好。但是,它不能在MonoTouch上编译。我的问题是,在MonoTouch中实现继承和接口实现的方式有所不同,我有很多工作要做(大量代码移植),所以我应该期待更多的惊喜吗?

任何帮助将不胜感激。

+0

提交一个bug - https://bugzilla.xamarin.com/ – Jason 2013-04-10 02:37:23

回答

1

那么,这显然是一个错误,因为你的代码确实在这些其他平台上编译了。我建议你与他们file a bug。同样很明显,编译器使用new关键字对虚拟方法感到困惑。这是一个耻辱。

这就是说,这很容易解决,至少在有修复之前。只需使用明确的接口实现:

public class JobController : BaseJobController, IJobController 
{ 
    IUser IJobController.User 
    { 
     get { return User; } 
    } 
} 

这应该足够,直到Xamarin产生修复。

+0

谢谢,解决了这个问题,并且错误提交给Xamarin https://bugzilla.xamarin.com/show_bug.cgi?id=11694 – 2013-04-10 04:19:33