C#中怎么使用中Gobject

为了看看GObject的构造析构问题做的一個简单的程序话不多说:





去年曾经用了 10 多天的时间学习叻一番 GObject,当时疏于心得的总结而现在已经忘记的差不多了。

最近因为观察到 GtkGLExt 项目没有跟进 gtk+-3.0 的意思便想自己动手,丰衣足食要么去改慥现有的 gtkglext 代码,要么另起炉灶也许在自由/开源的世界中,期待是可耻的只有动手才会幸福。但是这与 GObject 有什么关系?

进行抽象封装主要是为了方便 Clutter 在其上层创造场景图结构。既然是封装那么就需要容器,Cogl 所使用中的容器便是 GObject

也许你对 GTK+ 支持 OpenGL 的事情并不感兴趣,那么峩们便将话题转回至 GObject并提出这样一个问题:既然 GObject 如此重要,那么它究竟是做什么的

简单的说,GObject 是一个程序库它可以帮助我们使用中 C 語言编写面向对象程序。

很多人被灌输了这样一种概念:要写面向对象程序那么就需要学习一种面向对象编程语言,例如 C++、Java、C# 等等而 C 語言是用来编写结构化程序的。事实上面向对象只是一种编程思想,不是一种编程语言换句话说,面向对象是一种游戏规则它不是遊戏。GObject 告诉我们使用中 C 语言编写程序时,可以运用面向对象这种编程思想

从宏观层面上来论证 GObject 与 C++、Java 之类的面向对象编程语言相比具备哬种优越性,这是没有意义的最优化理论中有一个“没有免费的午餐”定理,大意是说没有一种方法可以适合于全部问题应当选择合適的方法,并将它放在合适的地方使用中这个定理对于编程语言的选择与使用中也有效,因为选择某种最合适的语言本身就是一个最優化问题。

假如我们选择了 GObject它最适合处理那些问题?

首先与操作系统层面相距较近的程序设计,即系统程序设计例如上文所列举的 GTK+ 忣其支柱,使用中 GObject 模拟的面向对象机制可以简化程序逻辑结构同时还能保证程序的性能以及系统接口直接调用。最主要的是系统程序員大都熟悉 C 语言,沟通较为方便

其次,有时为了兼顾程序性能与开发效率会对程序结构进行分层设计,底层模块采用 C 程序库实现上層则使用中动态语言或函数式语言实现,此时使用中 GObject 除了可以简化底层模块的逻辑结构还可以通过 GObject 与上层模块进行胶合。现在GNOME 3 项目提供了 GObject Introspection 技术,专门用于处理 C + GObject 所实现的程序与上层动态语言或函数式语言的胶合问题[]另外,GNOME 3 项目还实现了两种新的语言 Vala 和 Genie前者语法类似 C#,後者语法类似 Python使用中它们所编写的程序源码,利用相应的编译器便可以生成 C + GObject 代码进而可以编译为 C 程序[,]

那么 GObject 容易掌握么我认为它应該很容易学习和使用中,就像网络上许多人很轻易的诟病它非常繁琐难用一样容易在打算掌握任何一种技术之前,如果不相信它是简单嘚内心深处便会滋生一种逃避的意识。我们也可以例证如果 GObject 真的很难理解和应用,怎么会存在那么多基于 GObject 实现的程序难道那些程序嘚作者皆为天才抑或疯子?这种概率实在太小了

事实上,GObject 是被人为的复杂化了因为很多学习 GObject 的人,一上来就奔着要全面洞悉 GObject 的实现原悝与细节但是又缺乏足够的耐心和基础知识。如果换一个角度来考虑这个问题作为初学者,在学习 C++、Java 之类的面向对象编程语言之时峩们有打算直接潜心理解这些语言的内部实现吗?我们大都是要从 Hello world 之类的示例起步的对于 GObject


我要回帖

更多关于 使用中 的文章

 

随机推荐