Vala中的类成员与静态成员

时间:2016-10-16 04:56:07

标签: vala

我见过Truthy并经过多次测试。结果,我假设这个

静态成员:可以在课堂上访问&它的子类和所有这些实例 类成员:可以在所有实例中访问(其类及其子类)

这是对的吗?还有其他差异吗?

1 个答案:

答案 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手册。