2011-10-26 2 views
0

'항목'이 여러 개 있다고 가정 해 보겠습니다. 나중에 'Item'을 확장하는 'SpecialItem'으로 일부를 변경하고 싶습니다.클래스의 인스턴스를 캐스트로 바꾸는 방법, 모든 참조가 작동하는 동안

Item의 이전 인스턴스에 대한 기존 참조를 모두 업데이트하지 않고도 SpecialItem 인스턴스로 Item 인스턴스를 바꿀 수 있습니까?)

+0

클래스의 인스턴스는 항상 필요한만큼 특수화되어야합니다. –

답변

1

거꾸로 캐스트하거나 상속 체인을 '위로'이동할 수 있습니다. 같은 뭔가 :

var item:Item = mySpecialItem as Item; 

당신이 능력을 교환 고급 런타임이 필요한 경우, 예를 들어, 대신 상속의 조성물을 사용하여 인터페이스 인스턴스 대신 클래스 인스턴스와 같은 항목을 참조하는 생각.

그러나 @IronBCC에 따르면 속성을 바꾸기 만하면 속성을 공개로 설정할 수 있습니다.

+0

! 매우 명확한. – Flion

1

아니, 당신은이 작업을 수행 할 수

... 그래서 난 이 SpecialItem 으로이 =을 수행하지만, 당연히, 당신은 '이'로 그렇게 할 수 없습니다 싶습니다. 하지만 당신은 건설 사용할 수 있습니다 : 새 값을 설정하는) 당신의 항목 및 link.link = 새로운 SpecialItem을 (얻기 위해

class Link { 
    private var _link:*; 
    public get link(){} 
    public set link... 
} 

및 사용자 link.link을.

+0

아, 아주 간단하지만 매우 도움이되는 제안입니다! tnx! 덕분에 – Flion

관련 문제