7

私は 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;}}
}

Asp.Net Identity Framework のバージョン 2 にアップグレードしたところ、「明示的なインターフェイス宣言の 'IUser.UserName' はインターフェイスのメンバーではありません」というコンパイル エラーが発生し始めました。以前はすべて問題ありませんでした。

何が起こっている?

4

1 に答える 1

12

これには、次の 2 つのことが関係しています。

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

ボーナスの例

同じエラー メッセージを生成する完全な例を次に示します。

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

public interface Inherited : Base
{

}

public class Implementor : Inherited
{
    string Inherited.MyProperty { get; set; }
}
于 2014-05-13T11:13:32.817 に答える