我正在移植我在 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 中实现继承和接口(interface)实现的方式不同,我还有很多工作要做(很多代码要移植),所以我应该期待更多这样的惊喜吗?
任何帮助将不胜感激。
最佳答案
好吧,这显然是一个错误,因为您的代码确实可以在这些其他平台上编译。我推荐你file a bug跟他们。同样清楚的是,编译器对你对虚拟方法使用 new
关键字感到困惑。这是一种耻辱。
话虽这么说,但它很容易变通,至少在修复之前是这样。只需使用显式接口(interface)实现:
public class JobController : BaseJobController, IJobController
{
IUser IJobController.User
{
get { return User; }
}
}
在 Xamarin 产生修复之前,这应该足够了。
关于c# - 在 Windows、MonoForAndroid 和 MonoTouch 上实现接口(interface)的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15915752/