2014-05-13 3 views
4

는 내가 Asp.Net 신원 프레임 워크를 사용하고, 나는 다음과 같습니다 사용자 클래스가 : 난 그냥 Asp.Net 신원 프레임 워크의 버전 2로 업그레이드 한명시 적 인터페이스 선언의 컴파일 오류 '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;}} 
} 

을, 나는했습니다 "'명시 적 인터페이스 선언의 IUser.UserName'이 (가) 인터페이스의 구성원이 아닙니다."라는 컴파일 오류가 발생하기 시작했습니다. 전에는 괜찮 았어.

현재 무슨 일입니까?

답변

8

두 가지이에 기여 : 당신은 명시 적으로 Asp.Net 신원 프레임 워크의 버전 2에서

  • 에서, IUSER 인터페이스의 정의를 변경 한 IUSER 인터페이스의 사용자 이름 속성을 구현하고

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