2013-05-17 1 views
0

이것은 바보 같은 질문 일 수 있습니다.이 질문에 대해 사과 드리며, 이런 종류의 일을 처음 접했습니다.다트 미러를 사용할 때 API

미러에 대한 설명서를 읽은 후에 미러 API는 일부 인스턴스를 복사하는 것과 마찬가지로 언제/왜 사용해야하는지 모르는 일부 메서드를 복사하는 것과 같습니다.

아무도 내게 약간의 포인터를주고 싶습니다, 몇 가지 예가 좋을 것입니다.

+0

dart2js와 함께 사용할 경우 미러 API가 하나의 단점으로 코드 크기가 증가 할 수 있습니다. 미러 API를 사용하면 dart2j가 코드를 최적화하는 것이 더 어려워집니다. 나는 dart2js 미러 API에 대한 지원이 아직 완전히 구현 된 것으로 생각하지 않는다. 일반적으로 런타임시 코드 구조를 동적으로 검사해야하는 경우에만 사용해야합니다. –

답변

4

미러 API를 사용하면 객체 및 유형에 대한 메타 데이터를 프로그래밍 방식으로 (실행 중에) 검색하고 객체에 대한 메소드를 실행할 수 있습니다. .NET 또는 Java의 경우 reflection과 유사합니다.

전형적인 예

는 플러그인 지원을 시행하고 있습니다 :

명시 적으로 각각의 새로운 구현을 등록 할 필요없이, 이제 당신이 IPlugin 인터페이스를 정의하고 자동으로 PluginManager를 구현하는 각 유형의 인스턴스로 등록 할 것을 가정 해 봅시다. 경우에 따라 미리 모든 플러그인을 알지 못하는 경우도 있습니다. 사용자가 자신의 플러그인을 배포 할 수있는 경우 (: 나는 거울 API를 사용한 적이, 그래서 이것은 API 문서가 아닌 적절한 구현을 기반으로 높은 수준의 설명이다 경고) :

이 같은 그것을 할 수

  • 가 먼저 MirrorSystem.libraries를 사용 라이브러리에있는 각 클래스에 대한 ClassMirror를 얻기 위해 당신이 classes 속성을 사용하여 각 LibraryMirror에 대한 그런 다음 MirrorSystem
  • 의 각 라이브러리에 대한 LibraryMirror 인스턴스를 얻을 수
  • 각 경우 ClassMirrorsuperinterfaces을 사용하여 구현 된 모든 인터페이스를 얻으십시오
  • 구현 된 인터페이스가 IPlugin 인 경우 해당 클래스 (ClassMirror.newInstance)의 인스턴스를 만들어 플러그인 관리자에 등록 할 수 있습니다.

미러 API가 없으면 모든 유형을 열거하거나 (개체를 만들지 않고) 구현 한 인터페이스를 찾거나 미리 알지 못하는 유형의 인스턴스를 만들 수 없습니다.

솔직하게 말해서 Dart의 미러 API의 현재 상태가 확실하지 않습니다. 아직 완료되지 않았지만 잘못되었을 수 있습니다.