2011-01-15 5 views
0

Was ist schlecht an diesem Code? Es ist einfaches Beispiel:Problem mit Schnittstelle

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

ich Fehler erhalten kompilieren:

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 

Was ist die korrekte Umsetzung. Vielen Dank für Beratung

Antwort

3

Ihre Avatar.Cred Eigenschaft vom Typ ist Account, nicht IAccount ... aber LogOn erklärt zurückzukehren nur IAccount. Es könnte also eine andere IAccount Implementierung zurückgeben - der Compiler lässt Sie nicht einfach davon ausgehen, dass IAccount ein Account ohne explizite Umwandlung ist.

Optionen:

  • ändern Sie den Typ der Cred Eigenschaft auf IAccount statt Account. Dies ist wahrscheinlich am besten, da es die Kopplung zwischen Avatar und Account reduziert, so dass Sie andere Implementierungen von IAccount verwenden können.
  • Ändern Sie den Rückgabetyp von LogOn in Account statt IAccount. Dies bindet die LogOnAPI an Account, anstatt nur die Implementierung.
  • Cast, wenn Sie die Eigenschaft zuweisen:

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

+1: Wieder einmal eine andere klare und präzise Antwort. –

2
public class Avatar 
{ 
    public IAccount Cred { get; set; } 
} 
Verwandte Themen