Merge pull request #5714 from alexischr/update_bockbuild
[mono.git] / mono / tests / bug-562150.cs
1
2 using System;
3 using System.ComponentModel;
4 using System.Diagnostics;
5
6 namespace Application
7 {
8         public sealed class FooClass<S> where S : class
9         {
10                 public static FooClass<S> Create(string name, Action<S> action)
11                 {
12                         return new FooClass<S>(name, action);
13                 }
14
15                 public static FooClass<S> Create<T>(S source, string name,
16                         Func<S, T> func, FooClass<T> fooChild)
17                         where T : class
18                 {
19                         return new FooClass<S>(source, name, CreateCallback(func, fooChild));
20                 }
21
22                 private static Action<S> CreateCallback<T>(
23                         Func<S, T> func, FooClass<T> fooChild)
24                         where T : class
25                 {
26                         return delegate(S source)
27                         {
28                         };
29                 }
30
31                 private FooClass(string name, Action<S> action)
32                 {
33                         m_name = name;
34                         m_action = action;
35                 }
36
37                 private FooClass(S source, string name, Action<S> action)
38                         : this(name, action)
39                 {
40                         m_source = source;
41                 }
42
43                 S m_source;
44                 readonly string m_name;
45                 Action<S> m_action;
46         }
47
48         public class MyClass
49         {
50                 public int Value { get; set; }
51                 public MyClass Child { get; set; }
52         }
53
54         public class VarCompilerTest
55         {
56
57                 public static void Main(string[] args)
58                 {
59                         MyClass obj = new MyClass();
60                         int nCalls = 0;
61                         FooClass<MyClass> fooChild = FooClass<MyClass>.Create("Value", delegate { nCalls++; });
62                         FooClass<MyClass>.Create(obj, "Child", x => x.Child, fooChild);
63                 }
64         }
65 }