显式接口声明中的编译错误"IUser.UserName"不是接口的成员 - 为什么我会这样做?

Sam*_*ack 5 c# asp.net-identity asp.net-identity-2

我正在使用Asp.Net Identity框架,我有一个User类,如下所示:

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

   string IUser.UserName { get { return Email;} set { Email = value;}}
}
Run Code Online (Sandbox Code Playgroud)

我刚刚升级到Asp.Net身份Framework的第二版,我已经开始收到编译错误," 在显式接口声明'IUser.UserName’不是接口的成员 ".以前一切都很好.

怎么了?

Sam*_*ack 9

有两件事促成了这个:

  1. 您正在显式实现IUser接口的UserName属性
  2. 在Asp.Net Identity Framework的第2版中,IUser接口的定义发生了变化.UserName属性现在在通用IUser接口上定义,非通用IUser接口从该接口继承.

当您显式实现接口时,C#希望您使用最少派生接口的名称限定成员名称,而不是可以从其继承的接口名称.

要修复代码,您需要执行以下操作:

public class User : IUser
{
   string IUser<string>.UserName { get { return Email;} set { Email = value;}}
}
Run Code Online (Sandbox Code Playgroud)

奖金示例

这是一个生成相同错误消息的完整示例:

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

public interface Inherited : Base
{

}

public class Implementor : Inherited
{
    string Inherited.MyProperty { get; set; }
}
Run Code Online (Sandbox Code Playgroud)