3

我正在移植 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匹配User

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

我担心的是在 MonoTouch 中实现继承和接口实现的方式存在差异,我还有很多工作要做(很多代码要移植),所以我应该期待更多这样的惊喜吗?

任何帮助将非常感激。

4

1 回答 1

1

好吧,这显然是一个错误,因为您的代码确实在这些其他平台上编译。我建议您向他们提交错误new同样清楚的是,编译器会因为您对虚拟方法使用关键字而感到困惑。这是一种耻辱。

话虽如此,解决方法很容易,至少在修复之前是这样。只需使用显式接口实现:

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

在 Xamarin 生成修复程序之前,这应该足够了。

于 2013-04-10T02:37:03.483 回答