2010-03-21 5 views
2

값을 할당하거나 검색 할 때 집합을 무시하고 가져올 수 있습니까? 구체적인에서 가상 속성을 재정의 할 때 무한 루프를 방지하려면 어떻게합니까?

, 나는 다음과 같이 선언 된 속성이 클래스에서 상속 해요 :

virtual public Int32 Value { get; set; } 

내가 뭘하려는 것은 그것을 무시하고 설정된에서 유용한 무언가를하고의를 얻는 것입니다. 이 문제는 재정의 할 때 나타납니다. 또한 수동으로 할당하거나 속성에서 값을 반환해야합니다. 만약 내가 이렇게하면 :

override public Int32 Value 
{ 
    get 
    { 
     return this.Value; 
    } 
    set 
    { 
     this.Value = value; 
     // do something useful 
    } 

그럼 무한 루프를 만들고 있습니다. set에서 코드를 호출하지 않고 값을 설정하거나 가져 오는 방법이 있습니까? 아니면 실제 변수에 대해 별도의 이름을 만들어야합니까?

답변

6

this.Value 대신에 base.Value을 사용해야합니다. 그러면 기본 클래스의 속성을 검색/설정합니다.

기본 메서드는 실제로 재정의 할 수 있어야합니다 (virtual 또는 abstract). 귀하의 예에서는 그렇지 않습니다. 기본 메소드가 가상이 아니면 파생 클래스에서 대체하려고 할 때 컴파일러 오류 만 발생합니다.

+0

음, 사실 난 그냥 많이, 여기에서 감사를 입력하는 것을 잊었다, 가상이다. – Cbsch

1

뒤에 올 키워드는 base, documented here입니다. 이렇게하면 컴파일러가 기본 클래스에 정의 된 속성 참조를 확인하도록합니다. VB.NET 등가물은 MyBase입니다. 따라서

:

get 
{ 
    return base.Value; 
} 
set 
{ 
    base.Value = value; 
    // do something useful 
} 
관련 문제