I found a very nice feature of generics in C# 2.0: you can enforce the template type to be a class and also to be derived from another class / interface:




public abstract class VRCollectionNode : VRNode, ICollection where T : VRNode



So using the “where” keyword you can add contraints to the T type (here: to be derived from VRNode).