전화"Base-Getter"에 재정의 Getter 의 시설
-
20-09-2019 - |
문제
저는 기본 클래스"Parent"this:
using System;
using System.Collections.Generic;
using System.Text;
namespace ConsoleApplication1
{
class Parent
{
private int parentVirtualInt = -1;
public virtual int VirtualProperty
{
get
{
return parentVirtualInt;
}
set
{
if(parentVirtualInt != value)
{
parentVirtualInt = value;
}
}
}
}
}
와 아동 등 다음과 같다:
using System;
using System.Collections.Generic;
using System.Text;
namespace ConsoleApplication1
{
class Child : Parent
{
public override int VirtualProperty
{
get
{
if(base.VirtualProperty > 0)
{
throw new ApplicationException("Dummy Ex");
}
return base.VirtualProperty;
}
set
{
if(base.VirtualProperty != value)
{
base.VirtualProperty = value;
}
}
}
}
}
참고의 게터에서는 아이가 전화 getter 의 부모(또는 적어도 이것은 어떤 의도).
지금 사용하는"아이"를 클래스의 인스턴스화하여,그 값을 할당하(말 4)그 VirtualProperty 고 다음을 읽을 수 있습니다.
Child c = new Child();
c.VirtualProperty = 4;
Console.Out.WriteLine("Child.VirtualProperty: " + c.VirtualProperty);
을 실행할 때,나는 분명히 얻기 ApplicationException 말하는"거짓 Ex". 지 면 나는 설정의 중단점인
if(base.VirtualProperty > 0)
에서 아이의 값을 확인하십시오 base.VirtualProperty
(에 의해 유혹합니다) 기 전에 예외가 발생할 수 있습니다 (I assume(d)),내가 이미 받은 예외는 아니다.에서 내가 이것을 전달하는 문 base.VirtualProperty
에서"아이 Getter 자기 자신을 호출하는";의 종류입니다.
내가 무엇을 달성하고 싶은 동일한 동작하면 변화의 정의 parentVirutalInt
(부모)보호 및 사용 base.parentVirtualInt
Getter 의 아이는 대신 base.VirtualProperty
.고 나는 아직이 작동하지 않습니다.할 수 있는 사람에 이?나는 느낌을 재정의 속성이 다르게 행동하는 것보다 재정의하는 방법?
방법:나는 뭔가와 매우 유사 서브 클래스 클래스가 없는 통제(이것은 주된 이유는 이유는"방법"옵션).
종류 감사
해결책
그것은(틀림없이)버그에서 디버거.를 추가할 수 있습 투표를 이 피드백 문서.이것은 쉬운 일이 아닙니다 해결하기 위해,나는 디버거는 없이 준비하는 기본 시설 getter 방법을 주기 때문 v 테이블을 위한 슬롯을 제공 getter 대체되었습니다에서 파생된 클래스입니다.
한 가지 가능한 해결 방법을 저장하는 기본값에 지역 변수는 먼저 그렇게 검사할 수 있습니다.려고 하지 않습니다 당신의 게터는 모든 느립니다.