Multi level generics in C#

To create multi level generic inheritance in C3 following structure could be used:

// top most inheritance level
public class TopLayer: MidLayer<TopLayer>
{
	// Your code goes here
}

// internal layer
public class MidLayer<T>: BaseLayer<T> where T: MidLevelLayer<T>, new ()
{
	// Your code goes here
}

// base layer
public class BaseLayer<T> : IBaseObject, new()
{
	// Your code goes here
}

// (optional) Interface
public interface IBaseObject
{
	// Your code goes here
}