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); 27 28 @method 29 void _inspect(Vehicle v, Inspector i) 30 { 31 writeln("Inspect vehicle."); 32 } 33 34 @method 35 void _inspect(Car v, Inspector i) 36 { 37 next!inspect(v, i); // next calls the next most methodd method 38 writeln("Inspect seat belts."); 39 } 40 41 @method 42 void _inspect(Car v, StateInspector i) 43 { 44 next!inspect(v, i); 45 writeln("Check insurance."); 46 } 47 48 void main() { 49 version (unittest) { 50 } else { 51 updateMethods(); 52 Vehicle car = new Car; 53 Inspector inspector = new StateInspector; 54 inspect(car, inspector); // Inspect vehicle. Inspect seat belts. Check insurance. 55 } 56 } 57 58 mixin(registerMethods); 59 60 unittest 61 { 62 63 }