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

Vala编程语言高级特性-参数方向

参数方向

Vala 中的方法可以传递零个或多个参数。调用方法时的默认行为如下:

  • 任何值类型参数都会被复制到方法执行时的本地位置。

  • 任何引用类型参数不会被复制,而是只传递它们的引用给方法。

这种行为可以通过修饰符 ref 和 out 来改变。

从调用者角度看:

  • out:你可以传递一个未初始化的变量给方法,并期望在方法返回后它会被初始化。

  • ref:你传递给方法的变量必须已经初始化,方法可能会改变它也可能不会。

从被调用者角度看:

  • out:参数被认为是未初始化的,你必须初始化它。

  • ref:参数被认为是已初始化的,你可以改变它也可以不改变。

void method_1(int a, out int b, ref int c) { ... }
void method_2(Object o, out Object p, ref Object q) { ... }

这些方法可以如下调用:

int a = 1;
int b;
int c = 3;
method_1(a, out b, ref c);Object o = new Object();
Object p;
Object q = new Object();
method_2(o, out p, ref q);

每个变量的处理方式如下:

  • "a" 是值类型。该值将被复制到方法本地的新内存位置,因此对它的更改对调用者不可见。

  • "b" 也是值类型,但作为 out 参数传递。在这种情况下,值不会被复制,而是将数据的指针传递给方法,因此对方法参数的任何更改对调用代码都是可见的。

  • "c" 的处理方式与 "b" 相同,唯一的区别是方法所表明的意图。

  • "o" 是引用类型。方法被传递与调用者拥有的相同对象的引用。因此,方法可以更改该对象,但如果它重新赋值给参数,该更改对调用者不可见。

  • "p" 是相同类型,但作为 out 参数传递。这意味着方法将接收到指向对象引用的指针。因此,它可以用对另一个对象的引用替换该引用,当方法返回时,调用者将拥有对另一个对象的引用。当你使用这种类型的参数时,如果你没有给参数分配新的引用,它将被设置为 null。

  • "q" 再次是相同类型。这种情况的处理类似于 "p",但重要的区别是方法可以选择不更改引用,并且可以访问所引用的对象。Vala 将确保在这种情况下 "q" 实际引用某个对象,而不是设置为 null。

以下是如何实现 method_1() 的示例:

void method_1(int a, out int b, ref int c) {b = a + c;c = 3;
}

        当设置 out 参数 "b" 的值时,Vala 将确保 "b" 不为 null。因此,如果你不关心这个值,可以安全地将 null 作为 method_1() 的第二个参数传递。

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

相关文章:

  • 网站开发有什么用图片编辑器免费
  • 通义万相Wan2.5模型实测,可生成音画同步视频
  • 电子商务网站开发费用调研报告网络营销方式思维导图
  • dll网站服务推荐电商网站建设
  • gRPC-Go - 高性能 gRPC 框架的 Go 实现
  • 将Gowin高云FPGA仿真库导入Modelsim中并编译
  • 百姓网网站源码宜宾网站建设价格
  • 手机版网站案例云南网上工商办事大厅
  • SpringBoot项目Excel成绩录入功能详解:从文件上传到数据入库的全流程解析
  • Excel批量导入到数据库的方法
  • 开发网站定制珠海柏泰教育官方网站建设
  • 出版物级标记语言解析
  • 集合划分:用元素交换法破解等和难题
  • 培训建设网站深圳建站公司
  • 网站规划与建设规划书wordpress个性时光轴主题
  • 个人网站备案幕布网易梦幻西游手游官方网站下载
  • 数据集 - Al-Maktabah-Al-Shamilah (伊斯兰典籍全集)
  • uC/OS-III 队列(Queue)操作
  • 速度即排名:90分以下=谷歌流量流失?
  • 企业网站空间选择什么网站可以找人做设计
  • 网站建设如何快速增加用户中山企业网站建设公司
  • 工业4.0下的边缘存储设计:数据就地处理,响应更快更安全
  • 做情诗网站私有云 搭建wordpress
  • 上海定制app开发公司杭州seo关键词优化公司
  • Photoshop - Photoshop 根据需要以最佳格式保存照片
  • 11-Redis 集合类型深度指南:从去重特性到集合运算场景落地
  • 【Redis】超级超市的仓库管理系统
  • 个人网站建设模板视频链接生成器在线
  • 网站建设 推广薪资公司网站开发工具
  • 深圳seo网站推广报价电器网站建设策划书