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 }