2011-02-17 5 views
0

클래스의 이름을 기반으로 인터페이스를 구현하는 클래스의 인스턴스를 생성 할 수 있습니까?클래스 이름을 기반으로 인터페이스를 구현하는 클래스의 인스턴스 만들기?

나는 노력하고 있어요 :

var ClassReference:Object = getDefinitionByName("movement.OuterSpaceMovement") as IMovement; 
var m:IMovement = new ClassReference as IMovement; 
trace("startup..." + m); 

을 나는 오류 메시지가 ReferenceError가 점점 오전 -하지만 : 오류 # 1065 (OuterSpaceMovement)하지 정의합니다.

나는 동일한 인터페이스 (IMovement)를 구현하는 여러 클래스를 가지고 있지만 ...이 클래스의 새로운 인스턴스를 생성하고 다른 클래스에 데이터 형식 (IMovement 데이터 형식) 이러한 인스턴스를 통과 할 수 있어야합니다

그래서 나는 시도 :

var ClassReference:Class = getDefinitionByName("OuterSpaceMovement") as Class; 
var m:IMovement = new ClassReference() as IMovement; 

이 작동하는 것 ...하지만

var m:IMovement = new OuterSpaceMovement(); 

수행을 다음하지 않습니다? 클래스 정의에 문제가 (이 빌드에 포함되어야가없는 한,

var ClassReference:Class = getDefinitionByName("movement.OuterSpaceMovement") as Class; 
var m:IMovement = new ClassReference() as IMovement; 

이 작동합니다, 그래서 당신은에 OuterSpaceMovement 가져올 수 있습니다

답변

1

귀하의 ClassReference를 때문에, Class 형이어야한다 프로그램의 어딘가에서 적어도 한 번 이상 사용하거나 빌드 설정이나 컴파일러 옵션에 명시 적으로 포함 시키십시오.

그리고 OuterSpaceMovement는 반드시 IMovement를 구현해야합니다. ;)

+0

고마워요,이 도움이되지만 여전히 "정의되지 않은"오류 메시지가 나타납니다 ... 위의 일부 세부 정보가 추가되었습니다. 아무도 차이가 무엇인지 설명 할 수 있습니까 ?? – redconservatory

+1

내가 말했듯이 : getDefinitionByName()이 그것을 발견하기 위해서는 어느 시점에 클래스를 포함해야한다. 'new OuterSpaceMovement();'는 명시 적입니다 : 컴파일러는 클래스가 필요하다는 것을 알고 있기 때문에 클래스 파일을 가져옵니다. 클래스를 이름으로 호출 할 때 명시 적 참조는 없으므로 컴파일러에 클래스 정의가 포함되어 있는지 수동으로 확인해야합니다. 런타임에 찾을 수없는 경우 클래스가 없습니다. 그 '새로운 OuterSpaceMovement()'는 실제로 프로그램의 어느 곳이라도 될 수 있습니다. 그런 다음 getDefinitionByName() 호출도 작동합니다. – weltraumpirat

관련 문제