答案 0 :(得分:2)
使用Vala编译器的--ccode
开关进行检查:
public class Test {
public static int static_member;
public class int class_member;
public int instance_member;
}
编译时会生成这些C数据结构(我只显示重要部分):
struct _Test {
gint instance_member;
};
struct _TestClass {
gint class_member;
};
extern gint test_static_member;
静态成员不存储在属于该类的任何结构中,而是一个全局变量。它仍然使用类前缀作用域(因此" test _"是前置的)以避免与其他全局变量或其他类的静态成员发生名称冲突。
类成员存储在"类结构"实例成员存储在"实例结构"。
中"班级结构"可以通过派生类来扩展,但除此之外,您通常只有一个"类结构的实例"对于每个类(这就是为什么他们这样命名)。
"实例结构"每次创建新实例时都会保存所有实例数据。
要完全理解这些机制,你必须知道一些C并且必须阅读GObject手册。