문제

저는 기본 클래스"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 대체되었습니다에서 파생된 클래스입니다.

한 가지 가능한 해결 방법을 저장하는 기본값에 지역 변수는 먼저 그렇게 검사할 수 있습니다.려고 하지 않습니다 당신의 게터는 모든 느립니다.

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