• dart 学习 之 Getters and setters


    前言

    任何需要对属性进行更多控制而不是允许简单字段访问的时候,你都可以自定义 getter 和 setter。

    正文

    讲解

    Getter(获取器)和Setter(设置器)是面向对象编程中用于控制对类属性访问的特殊方法。Getter用于获取属性的值,而Setter用于设置属性的值。它们允许你在属性访问过程中添加额外的逻辑,例如验证输入、计算属性或记录属性访问。在你提供的示例中,你展示了如何在Dart编程语言中定义Getter和Setter。

    首先,让我们来看看Getter的示例:

    class MyClass {
      int _aProperty = 0;
    
      // Getter for aProperty
      int get aProperty => _aProperty;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    在上述示例中,我们创建了一个名为_aProperty的私有属性,并定义了一个名为aProperty的Getter。Getter的定义方式是在属性名称前面添加get关键字,后跟Getter的名称。在Getter内部,我们简单地返回了_aProperty的值。这允许外部代码通过myInstance.aProperty来访问_aProperty的值,就像访问普通属性一样,但实际上是通过Getter方法。

    接下来,让我们来看看Setter的示例:

    class MyClass {
      int _aProperty = 0;
    
      // Setter for aProperty
      set aProperty(int value) {
        if (value >= 0) {
          _aProperty = value;
        }
      }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    在这个示例中,我们定义了一个名为aProperty的Setter。Setter的定义方式是在属性名称前面添加set关键字,后跟Setter的名称。在Setter内部,我们可以添加额外的逻辑以控制属性的赋值。在这里,我们检查传入的值是否大于等于0,如果是,则将其赋值给_aProperty。这意味着外部代码可以通过myInstance.aProperty = newValue来设置_aProperty的值,但Setter允许我们在赋值时添加验证或其他逻辑。

    总结一下,Getter和Setter是用于控制属性访问的特殊方法,允许你在获取和设置属性值时添加额外的逻辑。Getter用于获取属性的值,Setter用于设置属性的值。这些机制有助于封装属性并确保属性值的合法性。在示例中,你展示了如何在Dart中定义Getter和Setter,但这些概念在许多其他面向对象编程语言中也是通用的。

    练习

    想象你有一个购物车类,其中有一个私有的 List 类型的 prices 属性。添加以下内容:

    一个名为 total 的 getter,用于返回总价格。

    只要新列表不包含任何负价格, setter 就会用新的列表替换列表(在这种情况下,setter 应该抛出 InvalidPriceException)。

    答案:

    class InvalidPriceException {}
    
    class ShoppingCart {
      List _prices = [];
      
      double get total => _prices.fold(0, (e, t) => e + t);
      
      set prices(List value) {
        if (value.any((p) => p < 0)) {
          throw InvalidPriceException();
        }
        
        _prices = value;
      }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
  • 相关阅读:
    mysql-视图/存储过程/触发器
    蚂蚁链牵头两项区块链国际标准在ITU成功立项
    基于Ubuntu部署前端项目
    《吐血整理》高级系列教程-吃透Fiddler抓包教程(25)-Fiddler如何优雅地在正式和测试环境之间来回切换-下篇
    华为云云耀云服务器L实例使用教学|Unbelievable, 带你用云服务器部署Windows12
    (附源码)springboot在线考试系统 毕业设计 160935
    《构建中小企业网络V7.1》实验
    字节跳动(抖音)软件测试月薪23K岗、技术总监三面面试题最新出炉
    MyCat实战
    java实现多线程下载器
  • 原文地址:https://blog.csdn.net/wniuniu_/article/details/132858439