명시 적 인터페이스 구현에서 동일한 이름의 암시 적 특성을 참조 할 수 있습니까?

StackOverflow https://stackoverflow.com/questions/650898

  •  19-08-2019
  •  | 
  •  

문제

문자열 유형의 속성을 구현하는 유형이 있다고 가정합니다.

public class Record
{
     public string Value { get; set; }
}

그런 다음 동일한 이름의 속성을 정의하는 인터페이스가 있습니다.

public interface IIntValued
{
     public int Value { get; set; }
}

다음과 같이 명시 적 인터페이스를 사용할 수 있습니다.

public class Record : IIntValued
{
     public string Value { get; set; }
     int IIntValued.Value 
     {
          get{ return 0; } set{}
     }
}

그러나 명시 적 인터페이스에서 문자열 "값"을 참조하려면 할 수 있습니까? 그렇다면 어떻게? 나는 그것이 다음과 같다고 생각합니다.

public class Record : IIntValued
{
     public string Value { get; set; }
     public int IIntValued.Value 
     {
          get
          {
               string value = /*Magic here*/.Value;
               return int.parse(value); 
          } 
          set{}
     }
}

보시다시피, 나는 "int valued" "value"속성의 표현식에 대한 "문자열 가치" "값"속성을 원합니다. 명시 적으로 구현 된 인터페이스 멤버 인 경우 해당 인터페이스를 타이핑 한 다음 사용할 수 있지만 암시 적 유형 멤버의 경우 어떻게 작동합니까?

참고 :이 예제는 약간 고안되었지만 언어 질문을 보여줍니다.

도움이 되었습니까?

해결책

암시 적 유형 멤버의 경우, 그냥 Value 또는 this.Value 괜찮을 것입니다 - 해결되지 않기 때문입니다 IIntValued.Value 기본적으로.

다른 팁

물론 넌 할 수있어! 문제는 접근성 키워드가 불법 인 곳에 배치했다는 것입니다. 명시 적으로 구현 된 회원에게는 접근성 키워드가 없을 수 있습니다. 암시 적으로 구현 된 것은 iintvalue와 함께 쓰여질 것입니다. 멤버 이름에 접두사.

다음은 작동하는 샘플입니다.

public interface IIntValued
{
  int Value { get; set; }
}

public class Record : IIntValued
{
  public string Value { get; set; }
  int IIntValued.Value
  {
    get
    {
      string value = this.Value;
      return int.Parse(value);
    }
    set { }
  }
}

예, 두 속성 모두에 액세스 할 수 있습니다. 속성에 액세스하는 데 사용되는 변수의 유형에 따라 다릅니다. 관찰하다:

Record myInstanceAsRecord = myInstance;
IIntValued myInstanceAsIIntValued = myinstance;

string valueAsString = myInstanceAsRecord.Value;
int valueAsInt = myInstanceAsIIntValued.Value;

어, 요약을 작성한 후, 나는 그 대답을 알고 있다는 것을 깨달았습니다. : p 내가 가져 가면 this 그리고 클래스 유형으로이를 캐스트하면 언급 된 구현이 포함되지 않습니다.

string value = ((Record)this).Value; //is the implicit string.

편집하다: 추가 입력 후 (감사합니다. 응답자!) 후에 컴파일러가 자동으로 수행하는 일을 수동으로 수행 할 필요가 없다는 것이 지적되었습니다. 따라서:

string value = this.Value;

일했을 것입니다. 물론 이것은이기 때문입니다 this 인터페이스 변수가 아니므로 암시 적 특성은 기본적으로 선택된 속성이됩니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top