gpt4 book ai didi

c# - 在 Windows、MonoForAndroid 和 MonoTouch 上实现接口(interface)的差异

转载 作者:行者123 更新时间:2023-11-30 17:54:37 26 4
gpt4 key购买 nike

我正在移植我在 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 中的那个,但类型确实不匹配 IUserUser

同样的代码已经在 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com