Merge pull request #4998 from kumpera/fix_56684
[mono.git] / mcs / tests / test-393.cs
1 // Compiler options: -langversion:default
2 // Test for covariance support in delegates
3 //
4
5 using System;
6
7  public class A {
8          protected string name;
9          
10          public A (string name)
11          {
12                  this.name = "A::" + name;
13          }
14
15          public A ()
16          {
17          }
18
19          public string Name {
20                  get {
21                          return name;
22                  }
23          }
24  }
25
26  public class B : A {
27          public B (string name)
28          {
29                  this.name = "B::" + name;
30          }
31
32          public B ()
33          {
34          }
35  }
36
37  public class C : B {
38          public C (string name)
39          {
40                  this.name = "C::" + name;
41          }
42  }
43
44  public class Tester {
45
46          delegate A MethodHandler (string name);
47
48          static A MethodSampleA (string name)
49          {
50                  return new A (name);
51          }
52
53          static B MethodSampleB (string name)
54          {
55                  return new B (name);
56          }
57
58          static C MethodSampleC (string name)
59          {
60                  return new C (name);
61          }
62
63          public static void Main ()
64          {
65                  MethodHandler a = MethodSampleA;
66                  MethodHandler b = MethodSampleB;
67                  MethodHandler c = MethodSampleC;
68
69                  A instance1 = a ("Hello");
70                  A instance2 = b ("World");
71                  A instance3 = c ("!");
72
73                  Console.WriteLine (instance1.Name);
74                  Console.WriteLine (instance2.Name);
75                  Console.WriteLine (instance3.Name);
76          }
77         
78  }
79