2013-04-10 38 views
3

我正在移植Windows Mobile上的一些舊代碼。代碼爲.NET 3.5 CE編譯得很好。我在MonoForAndroid中創建了一個項目,並引用了相同的代碼(以鏈接形式引用的.cs文件),並且它適用於Android。在Windows,MonoForAndroid和MonoTouch上實現界面的差異

但是,當我爲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 
} 

錯誤說IUser User { get;}的候選者是一個在BaseJobController,但類型不匹配IUserUserJobController不實現方法。

這個相同的代碼已經在Windows Mobile .NET 3.5 CE上工作了很多年,並且相同的代碼在MonoForAndroid上編譯得很好。但是,它不能在MonoTouch上編譯。我的問題是,在MonoTouch中實現繼承和接口實現的方式有所不同,我有很多工作要做(大量代碼移植),所以我應該期待更多的驚喜嗎?

任何幫助將不勝感激。

+0

提交一個bug - https://bugzilla.xamarin.com/ – Jason 2013-04-10 02:37:23

回答

1

那麼,這顯然是一個錯誤,因爲你的代碼確實在這些其他平臺上編譯了。我建議你與他們file a bug。同樣很明顯,編譯器使用new關鍵字對虛擬方法感到困惑。這是一個恥辱。

這就是說,這很容易解決,至少在有修復之前。只需使用明確的接口實現:

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

這應該足夠,直到Xamarin產生修復。

+0

謝謝,解決了這個問題,並且錯誤提交給Xamarin https://bugzilla.xamarin.com/show_bug.cgi?id=11694 – 2013-04-10 04:19:33