我编写了一个 C 库并使用 vapigen 为其创建 vapis。在生成的文件中,定义了一些属性,例如:
public int index { get; set; }
访问器方法(我从 C 中使用并且只返回属性的值)复制了这个“获取”和“设置”功能:
public int get_index ();
public void request_index (int index);
我想做的是告诉 Vala 在 Vala 代码使用符号获取或设置属性时调用我的方法:
i = object.index;
object.index = 42;
而不是像现在这样将其转换为g_object_get
/调用。g_object_set
有没有办法做到这一点?
我已经在 vala-devel 和 vala 邮件列表中发布了这个,但没有人回答。
编辑:我使用 gobject-introspection 和 vapigen 和 autotools 来自动生成 vapi 文件,而不用担心 API 更改,所以重新定义 Vala 中的类来做到这一点对我来说不是一个选择,但我可以使用gobject-introspection 注释和元数据文件。
使用解决方案编辑:所选答案中的注释包含我的问题的解决方案,但基本上我所做的是使用自定义 Vala 文件并使用元数据文件跳过使用的属性。
元数据文件中的相关内容:
MyObject.index skip
在自定义 Vala 文件中:
namespace MyNamespace
{
public class MyObject : GLib.Object
{
public int index
{
owned get;
[CCode (cname = "db_model_request_index")]
set;
}
}
}