Với mã nàyAS3 - Tôi có thể biết nếu một lớp thực hiện một giao diện (hoặc là một lớp con của một lớp khác)?
function someFunction(classParam:Class):Boolean
{
// how to know if classParam implements some interface?
}
ví dụ: So sánh classParam
với giao diện IEventDispatcher
:
someFunction(EventDispatcher) // returns true
someFunction(Object) // returns false
Tôi biết nó không thể được thực hiện với is
điều hành. Nhưng, có cách nào để làm điều đó không? Có cách nào để biết nếu một lớp thực hiện một số giao diện? (Hoặc là một lớp con của lớp khác?)
giải pháp có thể:
A. Tạo một đối tượng của classParam
và sử dụng đối tượng đó để so sánh sử dụng is
điều hành.
function someFunction(classParam:Class):Boolean
{
return (new classParam()) is IEventDispatcher
}
B. Sử dụng describeType()
function someFunction(classParam:Class):Boolean
{
var xml:XML = describeType(classParam)
// found "implementsInterface" value in xml and compare to IEventDispatcher
}
Có một cách mà không sử dụng describeType
hoặc tạo ra một nhà điều hành new
?
Điều làm phiền tôi là tốc độ của 'descriptionType'. Nó có chậm không? –
Nó phụ thuộc vào số lượng bạn đang sử dụng nó, nhưng có, nó khá chậm. Vấn đề là tôi không nghĩ có một cách khác để đạt được điều này. Bài viết này có thể bạn quan tâm, tác giả đã thực hiện một điểm chuẩn và phát hiện ra rằng một descriptionType trên UIComponent mất 5ms trên máy tính của mình: http://faindu.wordpress.com/2010/02/01/actionscript-flex-dependency-injection-performance/ –
Vì vậy, việc tạo đối tượng sẽ mất ít thời gian hơn? Tôi sẽ chạy một điểm chuẩn trên đó để xem nó. –