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;}。候補は の 1 つですが、型が と一致しBaseJobControllerません。IUserUser

この同じコードは、Windows Mobile .NET 3.5 CE で長年動作しており、同じコードは MonoForAndroid で正常にコンパイルされます。ただし、MonoTouch ではコンパイルできません。

私の懸念は、MonoTouch で実装される継承と Interface-Implementation の方法に違いがあることです。私には多くの作業 (移植するコードがたくさんあります) があるので、このような驚きを期待する必要がありますか??

どんな助けでも大歓迎です。

4

1 に答える 1

1

あなたのコードこれらの他のプラットフォームでコンパイルされるので、これは明らかにバグです。バグを報告することをお勧めします。newまた、仮想メソッドに対してキーワードを使用すると、コンパイラが混乱することも明らかです。これは残念です。

そうは言っても、少なくとも修正が行われるまでは、簡単に回避できます。明示的なインターフェース実装を使用するだけです:

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

Xamarin が修正プログラムを生成するまでは、これで十分です。

于 2013-04-10T02:37:03.483 に答える