flutter中的mixin和with的使用

在Dart编程语言中,mixinwith是两个非常重要的关键字,用于实现代码复用和多继承的功能。下面是它们的用法和示例解释。

mixin 关键字

mixin关键字用于定义一个混入类,它是一个包含方法和属性的类,可以被其他类混入使用。mixins在设计上通常是为了被多个类重用的一组功能。

mixin MyMixin {
  void sayHello() {
    print('Hello from MyMixin');
  }
}

with 关键字

with关键字用于将一个或多个mixin混入到一个类中,从而使该类获得这些mixin的方法和属性。

class MyClass with MyMixin {
  void greet() {
    sayHello();
  }
}

void main() {
  var myObject = MyClass();
  myObject.greet(); // 输出: Hello from MyMixin
}

在上面的例子中,MyClass使用with MyMixinMyMixin混入其中,这样MyClass就获得了MyMixin中的sayHello方法。

多个mixins

一个类可以混入多个mixins,使用逗号分隔:

mixin MixinA {
  void methodA() {
    print('Method A from MixinA');
  }
}

mixin MixinB {
  void methodB() {
    print('Method B from MixinB');
  }
}

class MyClass with MixinA, MixinB {
  void useMixins() {
    methodA();
    methodB();
  }
}

void main() {
  var myObject = MyClass();
  myObject.useMixins(); 
  // 输出:
  // Method A from MixinA
  // Method B from MixinB
}

混入优先级

当混入多个mixin时,后混入的mixin会覆盖前面mixin中的同名方法或属性。

mixin MixinA {
  void method() {
    print('Method from MixinA');
  }
}

mixin MixinB {
  void method() {
    print('Method from MixinB');
  }
}

class MyClass with MixinA, MixinB {}

void main() {
  var myObject = MyClass();
  myObject.method(); // 输出: Method from MixinB
}

在这个例子中,尽管MixinAMixinB都有method方法,但由于MixinB是最后一个混入的,因此MyClass中的method方法会是MixinB中的实现。

结论

mixinwith关键字使得Dart可以通过混入方式实现代码重用和类似多继承的效果,这在需要将一组功能复用到多个类中时非常有用。通过合理使用这两个关键字,可以使代码更加简洁和模块化。

在Dart中,mixin关键字用于定义一个混入类,而on关键字则可以用来限制混入类的应用范围。on关键字可以指定一个或多个超类,只有那些继承或实现了这些超类的类才能使用这个mixin。

mixin 和 on 的用法

定义mixin

首先,我们定义一个简单的mixin,不带任何限制:

mixin MyMixin {
  void sayHello() {
    print('Hello from MyMixin');
  }
}

任何类都可以将MyMixin混入:

class MyClass with MyMixin {}

void main() {
  var myObject = MyClass();
  myObject.sayHello(); // 输出: Hello from MyMixin
}

使用 on 关键字限制mixin的应用范围

假设我们希望mixin只能被某些特定的类使用,可以使用on关键字来实现。例如,我们定义一个A类,并限制MyMixin只能被AA的子类使用:

class A {
  void doSomething() {
    print('Doing something in A');
  }
}

mixin MyMixin on A {
  void sayHello() {
    print('Hello from MyMixin');
  }
}

在这个例子中,MyMixin只能被继承自A的类混入:

class B extends A with MyMixin {}

void main() {
  var b = B();
  b.sayHello(); // 输出: Hello from MyMixin
  b.doSomething(); // 输出: Doing something in A
}

不允许的用法

如果试图将MyMixin混入到不继承自A的类中,将会导致编译错误:

class C {}

class D extends C with MyMixin {} // 编译错误:'MyMixin' can't be used as a mixin because it isn't a subclass of 'A'.

结合使用

可以将多个mixin和on关键字结合使用,创建更复杂的类层次结构:

class A {
  void doSomething() {
    print('Doing something in A');
  }
}

class B {
  void doAnotherThing() {
    print('Doing another thing in B');
  }
}

mixin Mixin1 on A {
  void sayHello() {
    print('Hello from Mixin1');
  }
}

mixin Mixin2 on B {
  void sayGoodbye() {
    print('Goodbye from Mixin2');
  }
}

class C extends A with Mixin1 {}

class D extends B with Mixin2 {}

void main() {
  var c = C();
  c.sayHello(); // 输出: Hello from Mixin1
  c.doSomething(); // 输出: Doing something in A

  var d = D();
  d.sayGoodbye(); // 输出: Goodbye from Mixin2
  d.doAnotherThing(); // 输出: Doing another thing in B
}

在这个例子中,Mixin1只能被继承自A的类混入,而Mixin2只能被继承自B的类混入。

总结

  • mixin关键字用于定义混入类,提供代码重用的功能。
  • on关键字用于限制哪些类可以使用这个mixin,确保只有继承或实现了特定超类的类才能混入这个mixin。
  • 结合使用mixinon关键字,可以创建灵活且可控的类层次结构,增强代码的模块化和可重用性。

最后

如果想要成为架构师或想突破20~30K薪资范畴,那就不要局限在编码,业务,要会选型、扩展,提升编程思维。此外,良好的职业规划也很重要,学习的习惯很重要,但是最重要的还是要能持之以恒,任何不能坚持落实的计划都是空谈。

如果你没有方向,这里给大家分享一套由阿里高级架构师编写的《Android八大模块进阶笔记》,帮大家将杂乱、零散、碎片化的知识进行体系化的整理,让大家系统而高效地掌握Android开发的各个知识点。
img
相对于我们平时看的碎片化内容,这份笔记的知识点更系统化,更容易理解和记忆,是严格按照知识体系编排的。

欢迎大家一键三连支持,若需要文中资料,直接扫描文末CSDN官方认证微信卡片免费领取↓↓↓(文末还有ChatGPT机器人小福利哦,大家千万不要错过)

PS:群里还设有ChatGPT机器人,可以解答大家在工作上或者是技术上的问题
图片

  • 17
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值