using System;
public class Test
{
public static void Main()
{
var intClass = MyClass<int>.Create(55);
var charClass = MyClass<char>.Create(234, intClass);
Console.WriteLine("Parent id: " + charClass.ParentId);
}
}
public class MyClass<T>
{
public int Id { get; private set; }
public int? ParentId { get; private set; }
public static MyClass<T> Create(int id)
{
return Create<object>(id, null);
}
public static MyClass<T> Create<T2>(int id, MyClass<T2> parent = null)
{
var current = new MyClass<T>();
current.Id = id;
current.ParentId = parent?.Id;
return current;
}
private MyClass()
{
}
// ... Additional stuff
}
dXNpbmcgU3lzdGVtOwoKcHVibGljIGNsYXNzIFRlc3QKewoJcHVibGljIHN0YXRpYyB2b2lkIE1haW4oKQoJewoJCXZhciBpbnRDbGFzcyA9IE15Q2xhc3M8aW50Pi5DcmVhdGUoNTUpOwogICAgICAgIHZhciBjaGFyQ2xhc3MgPSBNeUNsYXNzPGNoYXI+LkNyZWF0ZSgyMzQsIGludENsYXNzKTsKICAgICAgICBDb25zb2xlLldyaXRlTGluZSgiUGFyZW50IGlkOiAiICsgY2hhckNsYXNzLlBhcmVudElkKTsKCX0KfQoKcHVibGljIGNsYXNzIE15Q2xhc3M8VD4KewogICAgcHVibGljIGludCBJZCB7IGdldDsgcHJpdmF0ZSBzZXQ7IH0KICAgIHB1YmxpYyBpbnQ/IFBhcmVudElkIHsgZ2V0OyBwcml2YXRlIHNldDsgfQoKICAgIHB1YmxpYyBzdGF0aWMgTXlDbGFzczxUPiBDcmVhdGUoaW50IGlkKQogICAgewogICAgICAgIHJldHVybiBDcmVhdGU8b2JqZWN0PihpZCwgbnVsbCk7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBNeUNsYXNzPFQ+IENyZWF0ZTxUMj4oaW50IGlkLCBNeUNsYXNzPFQyPiBwYXJlbnQgPSBudWxsKQogICAgewogICAgICAgIHZhciBjdXJyZW50ID0gbmV3IE15Q2xhc3M8VD4oKTsKICAgICAgICBjdXJyZW50LklkID0gaWQ7CiAgICAgICAgY3VycmVudC5QYXJlbnRJZCA9IHBhcmVudD8uSWQ7CiAgICAgICAgcmV0dXJuIGN1cnJlbnQ7CiAgICB9CgogICAgcHJpdmF0ZSBNeUNsYXNzKCkKICAgIHsKICAgIH0KCiAgICAvLyAuLi4gQWRkaXRpb25hbCBzdHVmZgp9