Проблема с интерфейсом - PullRequest
0 голосов
/ 15 января 2011

Что плохого в этом коде? Это простой пример:

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();
    }
}

Я получаю ошибку компиляции:

    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

Что такое правильная реализация. Благодарю за совет

Ответы [ 2 ]

3 голосов
/ 15 января 2011

Ваше свойство Avatar.Cred имеет тип Account, а не IAccount ... но объявлено, что LogOn возвращает только IAccount. Таким образом, он может вернуть некоторую другую реализацию IAccount - компилятор не позволит вам просто предположить, что IAccount будет Учетной записью без явного преобразования.

Параметры:

  • Измените тип свойства Cred на IAccount вместо Account. Это, вероятно, лучше всего, так как уменьшает связь между Avatar и Account, поэтому вы можете использовать другие реализации IAccount.
  • Измените тип возврата LogOn на Account вместо IAccount. Это связывает LogOn API с Account вместо просто реализации .
  • В ролях при назначении свойства:

    avatar.Cred = (Account) LogOn();
    
2 голосов
/ 15 января 2011
public class Avatar
{
    public IAccount Cred { get; set; }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...