Implement closest override return type matching
[mono.git] / mcs / tests / dtest-039.cs
1 class A
2 {
3         public virtual object Foo ()
4         {
5                 return null;
6         }
7         
8         public virtual object[] FooArray ()
9         {
10                 return null;
11         }
12         
13         internal virtual object Prop {
14                 get {
15                         return 9;
16                 }
17                 set {
18                 }
19         }
20         
21         public virtual object[] PropArray {
22                 get {
23                         return null;
24                 }
25         }
26         
27         internal virtual object this [int arg] {
28                 get {
29                         return 5;
30                 }
31                 set {
32                 }
33         }
34 }
35
36 class B : A
37 {
38         public override dynamic Foo ()
39         {
40                 return 5;
41         }
42         
43         public override dynamic[] FooArray ()
44         {
45                 return new object [] { 'a', 'b' , 'z' };
46         }
47         
48         internal override dynamic Prop {
49                 set {
50                 }
51         }
52         
53         public override dynamic[] PropArray {
54                 get {
55                         return new object [] { 'a', 'b' };
56                 }
57         }
58         
59         internal override dynamic this [int arg] {
60                 set {
61                 }
62         }
63 }
64
65 class MainClass : B
66 {
67         void Test ()
68         {
69                 char ch;
70                 ch = Prop;
71                 ch = PropArray [1];
72                 ch = this [1];
73         }
74         
75         public static int Main ()
76         {
77                 B b = new B ();
78                 int res;
79                 res = b.Foo ();
80                 if (res != 5)
81                         return 1;
82                 
83                 char ch = b.FooArray () [1];
84                 if (ch != 'b')
85                         return 2;
86                 
87                 ++b.Prop;
88                 res = b.Prop;
89                 if (res != 9)
90                         return 3;
91                 
92                 ch = b.PropArray [1];
93                 if (ch != 'b')
94                         return 4;
95                 
96                 res = b [3];
97                 if (res != 5)
98                         return 5;
99                 
100                 return 0;
101         }
102 }