2026/4/17 14:48:01
网站建设
项目流程
青海省交通建设工程质量监督站网站,网站建设php教程视频,什么是网络营销中最容易出问题的步骤,网站开发的设计与实现Mixins 就像是可插拔的功能模块#xff0c;可以给多个不同的类批量添加相同的功能实现#xff0c;而不需要这些类有共同的父类。
要使用mixin功能#xff0c;请使用with关键字#xff0c;后跟一个或多个mixin名称。下面的例子展示了两个使用mixins的类#xff08;或者它们…Mixins 就像是可插拔的功能模块可以给多个不同的类批量添加相同的功能实现而不需要这些类有共同的父类。要使用mixin功能请使用with关键字后跟一个或多个mixin名称。下面的例子展示了两个使用mixins的类或者它们是mixins的子类classMusicianextendsPerformerwithMusical{// ···}classMaestroextendsPersonwithMusical,Aggressive,Demented{Maestro(String maestroName){namemaestroName;canConducttrue;}}要定义一个mixin使用mixin声明。在需要同时定义mixin和类的罕见情况下可以使用mixin类声明。mixin和mixin类不能有extends子句并且不能声明任何生成构造函数。声明案例如下mixinMusical{bool canPlayPianofalse;bool canComposefalse;bool canConductfalse;voidentertainMe(){if(canPlayPiano){print(Playing piano);}elseif(canConduct){print(Waving hands);}else{print(Humming to self);}}}Specify members a mixin can call on itself指定mixin可以调用自身的成员有时mixin依赖于能够调用方法或访问字段但不能自己定义这些成员因为mixin不能使用构造函数的参数来实例化自己的字段。下面几节将介绍确保mixin的任何子类定义mixin行为所依赖的任何成员的不同策略。Define abstract members in the mixin在mixin中声明抽象方法会强制任何使用mixin的类型定义其行为所依赖的抽象方法。mixinMusician{voidplayInstrument(String instrumentName);// Abstract method.voidplayPiano(){playInstrument(Piano);}voidplayFlute(){playInstrument(Flute);}}classVirtuosowithMusician{overridevoidplayInstrument(String instrumentName){// Subclass must define.print(Plays the $instrumentName beautifully);}}Mixin 可以定义抽象成员访问子类的状态下面的例子可以应用于任何带有[name]属性的类型并提供实现了[hashCode]和运算符‘ ’。mixinNameIdentity{Stringgetname;overrideintgethashCodename.hashCode;overridebooloperator(other)otherisNameIdentitynameother.name;}classPersonwithNameIdentity{finalString name;Person(this.name);}Implement an interface与声明mixin抽象类似在不实际实现接口的同时在mixin上放置一个实现子句也将确保为mixin定义任何成员依赖项。abstractinterfaceclassTuner{voidtuneInstrument();}mixinGuitaristimplementsTuner{voidplaySong(){tuneInstrument();print(Strums guitar majestically.);}}classPunkRockerwithGuitarist{overridevoidtuneInstrument(){print(Dont bother, being out of tune is punk rock.);}}Use the on clause to declare a superclasson 子句的作用是定义 super 调用所解析的类型。因此只有当你在 mixin 中需要进行 super 调用时才应该使用它。on 子句强制任何使用该 mixin 的类也必须是 on 子句中类型的子类。这确保了如果 mixin 依赖于超类中的成员那么在使用 mixin 的地方这些成员是可用的。如果M是个mixin同时on了A如果你想在B类中混入M那么B必须是A的子类。classMusician{musicianMethod(){print(Playing music!);}}mixinMusicalPerformeronMusician{performerMethod(){print(Performing music!);super.musicianMethod();}}classSingerDancerextendsMusicianwithMusicalPerformer{}main(){SingerDancer().performerMethod();}class, mixin, or mixin class?mixin class声明需要至少3.0的语言版本。Mixin 声明定义一个 mixin。class声明定义一个类。Mixin class声明定义一个既可以作为普通类使用又可以作为 mixin 使用的类具有相同的名称和相同的类型。mixinclassMusician{// ...}classNovicewithMusician{// Use Musician as a mixin// ...}classNoviceextendsMusician{// Use Musician as a class// ...}适用于类或 Mixin 的任何限制也适用于 Mixin 类Mixin 不能有 extends 或 with 子句所以 Mixin 类也不能有。类不能有 on 子句所以 Mixin 类也不能有。