using System;
namespace Martin.Baulig
{
public class X
{
public int A;
}
public class Y
{
public int B;
}
public struct SomeStruct<R>
{
public int A;
public R Data;
public SomeStruct (int a, R data)
{
this.A = a;
this.Data = data;
}
}
public class Test<S>
where S : new ()
{
public S Data;
public Test ()
{
this.Data = new S ();
}
public void Hello ()
{
Console.WriteLine (Data);
}
}
public class Foo<T>
where T : new ()
{
public readonly T Data;
public readonly Test<T> Test;
public Foo ()
{
Data = new T ();
Test = new Test<T> ();
Test.Data = Data;
}
public void Hello<U> (U u)
{
Console.WriteLine (u);
Console.WriteLine (Data);
Console.WriteLine (Test);
SomeStruct<T> a = new SomeStruct<T> (5, Data);
Console.WriteLine (a);
}
}
class GenericTest
{
static void Main ()
{
Foo<X> x = new Foo<X> ();
Foo<Y> y = new Foo<Y> ();
Foo<Test<int>> test = new Foo<Test<int>> ();
x.Data.A = 5;
y.Data.B = 9;
test.Data.Data = 512;
x.Hello (y);
y.Hello (x);
test.Hello ("Hello World");
Console.WriteLine (test.Data.Data);
}
}
}