当前位置: 首页 > news >正文

Vala编程语言教程-信号

信号


        信号是 GLib 中 Object 类提供的系统,Vala 让所有 Object 的后代类都能轻松使用信号。C# 程序员可以将信号理解为事件(event),Java 程序员则可以将其视为实现事件监听器的另一种方式。简而言之,信号就是一种能在近乎同一时刻执行任意数量外部形式相同(即具有相同签名)的方法的机制。具体的执行方法在 gobject 内部实现,Vala 程序无需关心其细节。

        信号被定义为类的成员,形式上类似于没有方法体的方法。可以通过 connect() 方法为信号添加处理器。为了深入理解,以下示例还引入了 lambda 表达式——在 Vala 中编写信号处理代码时非常有用的一种方式:

public class Test : GLib.Object {

    public signal void sig_1(int a);

    public static int main(string[] args) {
        Test t1 = new Test();

        t1.sig_1.connect((t, a) => {
            stdout.printf("%d\n", a);
        });

        t1.sig_1(5);

        return 0;
    }
}

运行结果:

5

        这段代码使用熟悉的语法定义了一个名为 "Test" 的新类。类的第一个成员是名为 "sig_1" 的信号,定义时会传递一个整数。在程序的 main 方法中,我们首先创建 Test 实例(信号必须依附于类的实例)。接着我们为实例的 "sig_1" 信号分配了一个处理器,使用 lambda 表达式内联定义。定义声明该方法将接收两个参数 "t" 和 "a",但没有指定类型——这种简洁写法之所以可行,是因为 Vala 已知晓信号的定义,能自动推断所需类型。

        处理器需要两个参数的原因是:每当信号被触发时,触发该信号的对象会作为第一个参数传递给处理器。第二个参数则是信号声明时要提供的参数。

        最后我们通过像调用类方法一样调用信号来触发它,gobject 会负责将消息转发给所有已连接的处理器。Vala 使用者无需了解其底层机制。

        注意:目前 public 访问修饰符是唯一可用的选项,所有信号都可以被任意代码连接和触发。

信号可以使用任意组合的标志进行注解:

[Signal (action=true, detailed=true, run=true, no_recurse=true, no_hooks=true)]
public signal void sig_1 ();


更多示例参见 Projects/Vala/SignalsAndCallbacks – GNOME Wiki Archive。

http://www.dtcms.com/a/93948.html

相关文章:

  • CSS 实现滚动条的隐藏但保留滚动功能
  • Python列表生成式
  • 联合体(Union)的使用与应用场景
  • 【解决】Visual Studio 无法中文输入问题
  • 集成电容器降低换向环电感
  • 李想官宣开源整车操作系统
  • 【机器学习】——机器学习基础概念
  • Redis 中的热点键和数据倾斜
  • 行星际激波特征分析及其在太阳风激波自动检测算法开发与优化中的应用
  • 《深度剖析SQL数据类型转换:隐式与显式的奥秘》
  • 超简单:Linux下opencv-gpu配置
  • 什么是 JavaScript 中的原型链(Prototype Chain)?
  • Windows 图形显示驱动开发-WDDM 2.4功能-GPU 半虚拟化(五)
  • 北理工计算机考研复试上机2012年真题
  • 场馆预约小程序的设计与实现
  • 02 相机标定相关坐标系
  • greenhill编译出现:3201原因错误
  • 视频管理平台-信息泄露漏洞
  • 027-7zsfx
  • pom.xml与.yml,java配置参数传递
  • JVM 概述/结构/架构/生命周期
  • 【YOLOv8】YOLOv8改进系列(10)----替换主干网络之UniRepLKNet
  • 【蓝桥杯】单片机设计与开发,模板V1.1
  • 记一次loki报错的处理过程
  • 自由学习记录(49)
  • 解锁大语言模型潜力:LangChain,构建AI应用的全新框架
  • Java 8 Stream API
  • 多线程 --- 多线程编程
  • 【数学建模】(启发式算法)遗传算法:自然选择的计算模型
  • NC,GFS、ICON 数据气象信息可视化--降雨量的实现