2014-05-13 29 views
4

我使用Asp.Net身份框架,我有一個用戶類,它看起來是這樣的:顯式接口聲明中的編譯錯誤'IUser.UserName'不是接口的成員 - 爲什麼我得到這個?

public class User : IUser 
{ 
    public string Id {get; private set;} 
    public string Email {get; set;} 

    string IUser.UserName { get { return Email;} set { Email = value;}} 
} 

我剛剛升級到Asp.Net身份框架的版本2,我已經開始獲取編譯錯誤「'IUser.UserName'在顯式接口聲明中不是接口的成員」。以前一切都很好。

發生了什麼事?

回答

8

兩件事情促成了這一點:

  1. 你實現明確
  2. 在Asp.Net身份Framework的第二版,IUSER接口的定義改變了IUSER接口的UserName屬性。 UserName屬性現在在通用IUser接口上定義,非通用IUser接口從該接口繼承。

當您明確實現接口時,C#期望您使用最小派生接口的名稱限定成員名稱,而不是可能繼承它的接口的名稱。

要解決你的代碼,你需要做的是:

public class User : IUser 
{ 
    string IUser<string>.UserName { get { return Email;} set { Email = value;}} 
} 

獎金例

這裏是產生相同的錯誤消息的完整的例子:

public interface Base 
{ 
    string MyProperty { get; set; } 
} 

public interface Inherited : Base 
{ 

} 

public class Implementor : Inherited 
{ 
    string Inherited.MyProperty { get; set; } 
} 
相關問題