class Vala 中的成员与静态成员
class members vs. static members in Vala
看过https://wiki.gnome.org/Projects/Vala/Manual/Classes#Types_of_class_members,也测试过几次。结果,我假设这个
静态成员:可以在 class 及其子 class 及其所有实例中访问
class 成员:可以在 所有实例 中访问(一个 class 及其子 class 部分)
这样对吗?还有其他区别吗?
让我们使用 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;
静态成员不存储在属于class的任何结构中,而是一个全局变量。它仍然使用 class 前缀限定范围(因此 "test_" 是前缀)以避免与其他全局变量或其他 classes.
的静态成员名称冲突
class成员存储在"class structure"中,实例成员存储在"instance structure"中。
"class structure" 可以通过派生 class 来扩展,但除此之外,对于每个 class,您通常只有一个 "class structure" 实例(这是他们为什么这样命名)。
每次创建新实例时,"instance structure" 都会保存所有实例数据。
要全面了解这些机制,您必须了解一些 C 语言并阅读 GObject 手册。
看过https://wiki.gnome.org/Projects/Vala/Manual/Classes#Types_of_class_members,也测试过几次。结果,我假设这个
静态成员:可以在 class 及其子 class 及其所有实例中访问
class 成员:可以在 所有实例 中访问(一个 class 及其子 class 部分)
这样对吗?还有其他区别吗?
让我们使用 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;
静态成员不存储在属于class的任何结构中,而是一个全局变量。它仍然使用 class 前缀限定范围(因此 "test_" 是前缀)以避免与其他全局变量或其他 classes.
的静态成员名称冲突class成员存储在"class structure"中,实例成员存储在"instance structure"中。
"class structure" 可以通过派生 class 来扩展,但除此之外,对于每个 class,您通常只有一个 "class structure" 实例(这是他们为什么这样命名)。
每次创建新实例时,"instance structure" 都会保存所有实例数据。
要全面了解这些机制,您必须了解一些 C 语言并阅读 GObject 手册。