类型系统何时在 glib 中注册类型?

When is a type registered by the type system in glib?

我目前正在开发一个库,运行我的单元测试代码和我基于该代码的实际应用程序之间的行为存在一些 st运行ge 不一致。

看,我正在尝试从我想实例化的 class 的名称中获取 Type 结构,但我什么也没得到(例如类型在那里,但是 name() 产生 nullis_a() 失败等)

但是,如果我先创建类型的实例,然后再次尝试根据名称获取类型,它会按我预期的那样工作(这可能是我的单元测试工作的原因)

所以我想知道,类型系统何时注册并可通过。 from_name(...) ?

类型系统是否只有在 运行 时实例化后才知道它?在实例化 class 的实例之前,是否还有另一个原因无法识别 class 名称?我应该使用其他注册方法吗?

如果有什么不同的话,我正在用 Vala 编写代码。

类型在其 get_type() 函数被调用时首先注册到类型系统。这在很多地方都会被调用,基本上只要您需要获取该类型的 GType 。通常,它会在类型 class_init 期间首先被调用,这发生在第一个实例 init.

期间

所以当你说“类型系统只在 运行 时间实例化后才知道它”时,基本上你是对的,因为这通常是发生的事情。但是,您可以提前显式调用类型的 get_type() 函数并将其传递给 g_type_ensure(),从而提前进行类型注册。例如,查看 GLib 的作用 here:

/* Initialize types from built-in "modules" */
g_type_ensure (g_null_settings_backend_get_type ());
g_type_ensure (g_memory_settings_backend_get_type ());
g_type_ensure (g_keyfile_settings_backend_get_type ());
…