2011-01-15 5 views
0

このコードには何が悪いですか?それが正しい実装である何インターフェイスの問題

Error 5 Cannot implicitly convert type 'console.Program.IAccount' to 'console.Program.Account'. An explicit conversion exists (are you missing a cast?) C:\Users\Jan\Documents\Visual Studio 2010\Projects\BACKUP\Pokec_Messenger\ver.beta 
\Pokec__Messenger\console\Program.cs 35 27 console 

:私はコンパイルエラー取得

class Program 
{ 
    public interface IAccount 
    { 

    } 

    public class Account :IAccount 
    { 

    } 

    public static IAccount LogOn() 
    { 
     return new Account(); 
    } 

    public class Avatar 
    { 
     public Account Cred { get; set; } 
    } 


    static void Main(string[] args) 
    { 
     var avatar = new Avatar(); 

     avatar.Cred = LogOn(); 
    } 
} 

:それは簡単な例です。

答えて

3

あなたAvatar.CredプロパティがタイプAccount、ないIAccountのあるアドバイスをありがとう...しかしLogOnはちょうどIAccount返すように宣言されています。コンパイルでは、IAccountが明示的キャストのないアカウントになると仮定することはできません。

オプション:

  • 変更IAccount代わりのAccountからCredプロパティのタイプ。これはおそらく、AvatarAccountの間のカップリングを減らすので、おそらく最適です。したがって、IAccountの他の実装を使用することができます。
  • LogOnの戻り値のタイプをIAccountの代わりにAccountに変更します。これは、の実装ではなく、LogOnAPIAccountを結んでいます。あなたがプロパティを割り当てる
  • 出演:

    avatar.Cred = (Account) LogOn(); 
    
+0

1:もう一度、別の明確かつ簡潔な答え。 –

2
public class Avatar 
{ 
    public IAccount Cred { get; set; } 
} 
関連する問題