在Windows,MonoForAndroid和MonoTouch上实现界面的差异

时间:2013-04-10 02:11:18

标签: c# .net visual-studio xamarin.ios xamarin.android

我正在移植Windows Mobile上的一些旧代码。代码编译适用于.NET 3.5 CE。我在MonoForAndroid中创建了一个项目,并引用了相同的代码(.cs文件称为链接),它适用于Android。

但是,当我为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  
}

错误表明JobController未实现方法IUser User { get;}候选人是BaseJobController中的候选人,但该类型与IUser的{​​{1}}不匹配。

这个代码已经在Windows Mobile .NET 3.5 CE上运行了很多年,并且相同的代码在MonoForAndroid上编译得很好。但是,它无法在MonoTouch上编译。

我担心的是MonoTouch中继承和接口实现的方式有所不同,我还有很多工作要做(很多端口代码),所以我应该期待更多的惊喜吗?

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

嗯,这显然是一个错误,因为您的代码 在这些其他平台上编译。我建议你file a bug。同样很清楚,编译器会因为对虚拟方法使用new关键字而感到困惑。这是一种耻辱。

话虽这么说,但很容易解决,至少在有修复之前。只需使用显式接口实现:

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

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

相关问题