I wanted to create an observableCollection that is sortable so i started creating a class that inherit observable with some methods to sort it, then i wanted that class to p
The problem is that your constraint on T is "T is required to be an I", and you have passed a DerivedClass for T, but DerivedClass is not convertible to I, it is convertible to I.
I don't know what you are trying to represent with the constraint that T be an I. I do know that people often use this pattern to try to represent a constraint that the C# type system does not actually implement. See my article on the subject for details:
http://blogs.msdn.com/b/ericlippert/archive/2011/02/03/curiouser-and-curiouser.aspx
I encourage you to simplify things considerably; you seem to be trying to capture too much in the type system.
The reason why I is not convertible to I is because in order for variance to work, the interface must be marked as supporting variance; mark the T with out or in depending on whether you want covariance or contravariance.
However, since IList is invariant, it will not be legal to make the derived interface covariant or contravariant. Consider IEnumerable instead, as it is covariant in T.
In order for an interface to be covariant in T it needs to only use T in output positions. List uses T in both input and output positions, so it cannot be covariant or contravariant.