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

Vala编程语言教程-面向对象编程语基础

基础


        尽管Vala语言并不强制你使用对象进行编程,但有些功能只能通过对象的方式来实现。因此,在大多数情况下,你肯定会希望采用面向对象的编程风格。与大多数当前的编程语言一样,为了定义你自己的对象类型,你需要编写一个类定义。
 
        一个类定义说明了该类型的每个对象拥有哪些数据,它可以持有对哪些其他对象类型的引用,以及可以在该对象上执行哪些方法。类定义中可以包含另一个类的名称,表示新定义的类应该是这个类的子类。一个类的实例同时也是它所有超类的实例,因为它从超类继承了所有的方法和数据,尽管它自身可能无法访问所有这些内容。一个类也可以实现任意数量的接口,接口是一组必须由该类实现的方法定义——一个类的实例同时也是其自身类或超类所实现的每个接口的实例。
 
        在Vala语言中,类还可以有“静态”成员。这个修饰符允许将数据或方法定义为属于整个类,而不是属于类的某个特定实例。可以在不拥有类实例的情况下访问这些成员。
 
        一个简单的类可以如下定义:


public class TestClass : GLib.Object {

    /* 字段 */
    public int first_data = 0;
    private int second_data;

    /* 构造函数 */
    public TestClass() {
        this.second_data = 5;
    }

    /* 方法 */
    public int method_1() {
        stdout.printf("private data: %d", this.second_data);
        return this.second_data;
    }
}


         这段代码将定义一个新的类型(该类型会自动在gobject库的类型系统中注册),它包含三个成员。有两个数据成员,即顶部定义的整数,还有一个名为method_1的方法,该方法返回一个整数。类声明表明这个类是GLib.Object的子类,因此它的实例也是Object类型的实例,并且也包含了该类型的所有成员。这个类继承自Object这一事实也意味着Vala语言中有一些特殊功能,可以用来轻松访问Object的一些特性。
 
        这个类被声明为public(默认情况下,类是internal的)。这意味着它可以被这个文件之外的代码直接引用——如果你是使用glib/gobject的C程序员,你会认识到这相当于在一个头文件中定义类接口,其他代码可以包含这个头文件。
 
        类的成员也都被声明为public或private。成员first_data是public的,所以任何使用这个类的用户都可以直接看到它,并且可以在不被包含它的实例察觉的情况下修改它。第二个数据成员是private的,所以只能被属于这个类的代码引用。Vala支持四种不同的访问修饰符:

        ▶public:无访问限制。
        ▶private:访问限制在类/结构体定义内部。如果未指定访问修饰符,这是默认的访问修饰符。
        ▶protected:访问限制在类定义内部以及任何继承自该类的类中。
        ▶internal:访问限制在同一个包中定义的类。
 
        构造函数用于初始化类的新实例。它与类具有相同的名称,可以接受零个或多个参数,并且定义时没有返回类型。
 
        这个类的最后一部分是一个方法定义。这个方法名为method_1,它将返回一个整数。由于这个方法不是静态的,它只能在这个类的实例上执行,因此可以访问该实例的成员。它可以通过this引用做到这一点,this引用始终指向调用该方法的实例。除非存在歧义,否则如果愿意,可以省略this标识符。
 
你可以如下使用这个新类:
 

TestClass t = new TestClass();
t.first_data = 5;
t.method_1();

相关文章:

  • Java-腾讯云短信模板兼容阿里云短信模板-短信模板参数生成
  • CCF-CSP认证 202206-2寻宝!大冒险!
  • configured user limit (128) on the number of inotify instances has been reached
  • 常考计算机操作系统面试习题(三上)
  • 项目代码的构建
  • 【QA】单件模式在Qt中有哪些应用?
  • isaacgymEnvs 的yaml文件dt设置
  • 【AI学习笔记】Coze平台实现将Excel文档批量导入数据库全过程
  • 多源数据融合处理方法综述
  • 机器学习——KNN超参数
  • 第十五章:模板参数推导_《C++ Templates》notes
  • L2-【英音】地道语音语调--连读
  • 一条sql语句在mysql中的执行流程(Mysql基础架构)
  • 【Unity3D】摄像机适配场景以及Canvas适配
  • 使用LangChain开发智能问答系统
  • c#难点整理
  • 【模板】计算几何入门
  • Vue 表单输入绑定,双向绑定
  • 基于 intellij-platform-plugin-template 开发IDEA插件注意事项
  • form 表单内容序列化成一个字符串
  • 餐饮店直播顾客用餐,律师:公共场所并非无隐私,需对方同意
  • 一周观展|五一假期将到,特展大展陆续开幕
  • 出国留学、来华留学呈现双增新趋势,“00后留学生个性鲜明”
  • 70后供销合作总社理事会原副主任侯顺利任中国融通外部董事
  • 从中央政治局会议看经济工作着力点:以高质量发展的确定性应对外部不确定性
  • 云南省委常委、组织部部长刘非任浙江省委常委、杭州市委书记