我正在移植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中继承和接口实现的方式有所不同,我还有很多工作要做(很多端口代码),所以我应该期待更多的惊喜吗?
非常感谢任何帮助。
答案 0 :(得分:1)
嗯,这显然是一个错误,因为您的代码 在这些其他平台上编译。我建议你file a bug。同样很清楚,编译器会因为对虚拟方法使用new
关键字而感到困惑。这是一种耻辱。
话虽这么说,但很容易解决,至少在有修复之前。只需使用显式接口实现:
public class JobController : BaseJobController, IJobController
{
IUser IJobController.User
{
get { return User; }
}
}
这应该足够,直到Xamarin产生修复。