返回介绍

11.17 数据隐藏与封装

发布于 2020-09-09 22:55:49 字数 872 浏览 1032 评论 0 收藏 0

到目前为止,所有的类属性和方法都毫无限制地在类外可见。然而,我们有时希望通过隐藏类属性和类方法的名字来限制在类的外部访问类属性和类方法。这就使得其它程序员能够不依赖于一个特定的实现,而且它还防止仅对类内部有效的类属性被偶然地修改。当所有的数据都变成隐藏的(仅能被公共方法访问),代码的维护和测试都变得更加容易。

在SystemVerilog中,未被限定的类属性和方法是公共的,它们对访问对象名字的任何人都是有效的。

一个被标识成local的成员仅对类内的方法有效。而且这些本地成员在子类内是不可见得。当然,访问本地类属性或方法的非本地方法可以被继承,并且作为子类的方法它可以正确地工作。

除了可以被继承以及对子类可见外,一个被标识成protected的类属性或方法具有本地成员的所有特性。

注意:在类的内部,一个本地方法或类属性可以被引用,即使它处于一个不同的实例中。例如:

class Packet;
    local integer i;

    function integer compare (Packet other);
        compare = (this.i == other.i);
    endfunction
endclass

关于封装的一个严格的解释可能是:other.i在当前的包中不应该是可见的,因为它是一个在其实例外引用的本地类属性。然而,在同一个类内这样的引用是被允许的。在这个例子中,this.i应该与other.i比较,并返回逻辑比较的结果。

类成员可以被标识成local或protected;类属性可以进一步定义成const,方法可以进一步定义成virtual。在指定这些修饰符的时候没有预定义的顺序;然而,对于每一个成员它们只能出现一次。既将成员定义成local又定义成protected,或者复制任何其它修饰符都是错误的。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文