C# 获取一个'SBObject'实例';这是真正的类型

C# 获取一个'SBObject'实例';这是真正的类型,c#,appkit,scripting-bridge,C#,Appkit,Scripting Bridge,(这个问题被标记为c 35;,因为我将在Xamarin中完成这项工作,但这更像是一个框架问题;语言应该无关紧要。) 我正在尝试使用脚本桥与音乐(née iTunes)交互。为此,我可以获得SBApplication,并向它索取属性;例如,playerState将获取它当前是否正在播放,而sources将基本上从层次上获取整个库 但这是相当低级的,所以我深入研究了sdef和sdp以生成一些XML和头文件,以便编写一些匹配的包装器类,这些类与所描述的类相匹配 我陷入困境的部分基本上是继承。playl

(这个问题被标记为
c 35;
,因为我将在Xamarin中完成这项工作,但这更像是一个框架问题;语言应该无关紧要。)

我正在尝试使用脚本桥与音乐(née iTunes)交互。为此,我可以获得
SBApplication
,并向它索取属性;例如,
playerState
将获取它当前是否正在播放,而
sources
将基本上从层次上获取整个库

但这是相当低级的,所以我深入研究了
sdef
sdp
以生成一些XML和头文件,以便编写一些匹配的包装器类,这些类与所描述的类相匹配

我陷入困境的部分基本上是继承。
playlists
属性可以包含不同类型的播放列表(例如
MusicPlaylist
MusicFolderPlaylist
等,所有这些都继承自
MusicPlaylist
),我只对
MusicUserPlaylist
实例感兴趣

但我甚至不知道如何询问实例的类型,效率要低得多。我看到
debugDescription
回答了这个问题,例如:

<SBObject @0x6000008bf180: <class 'cUsP'> id 28712
of <class 'cSrc'> id 63 of application "Music" (8034)>
但是…我真的应该为此解析
描述
?肯定有更好的方法吗?我看到构造函数总是采用
elementCode

- (instancetype) initWithElementCode:(DescType)code
properties:(nullable NSDictionary<NSString *, id> *)properties data:(nullable id)data;
-(instancetype)initWithElementCode:(DescType)代码
属性:(可空NSDictionary*)属性数据:(可空id)数据;
(实际上,对于
DescType
是否与例如
class'cUsP'
?)相同,我不是100%的专家。)

然而,似乎没有办法找回元素代码

TL;DR:给定一个可以包含各种子类的
SBElementArray
,如何验证实例的动态脚本桥类型是某个类