1 module nextdemo; 2 3 import std.stdio; 4 import openmethods; 5 6 interface Vehicle 7 { 8 } 9 10 class Car : Vehicle 11 { 12 } 13 14 class Truck : Vehicle 15 { 16 } 17 18 class Inspector 19 { 20 } 21 22 class StateInspector : Inspector 23 { 24 } 25 26 void inspect(virtual!Vehicle, virtual!Inspector, ref int checks); 27 28 @method 29 void _inspect(Vehicle v, Inspector i, ref int checks) 30 { 31 writeln("Inspect vehicle."); 32 ++checks; 33 } 34 35 @method 36 void _inspect(Car v, Inspector i, ref int checks) 37 { 38 next!inspect(v, i, checks); // next calls the next most methodd method 39 ++checks; 40 writeln("Inspect seat belts."); 41 } 42 43 @method 44 void _inspect(Car v, StateInspector i, ref int checks) 45 { 46 next!inspect(v, i, checks); 47 ++checks; 48 writeln("Check insurance."); 49 } 50 51 void main() { 52 int checks; 53 Vehicle car = new Car; 54 Inspector inspector = new StateInspector; 55 inspect(car, inspector, checks); // Inspect vehicle. Inspect seat belts. Check insurance. 56 assert(checks == 3); 57 } 58 59 mixin(registerMethods);