What is wrong with this?
interface IRepository where T : IBusinessEntity
{
IQueryable GetAll();
void Save(T t);
void Delete
Consider what would happen if the compiler allowed that:
interface IR
{
void D(T t);
}
class C : IR
{
public void D(Mammal m)
{
m.GrowHair();
}
}
...
IR x = new C();
// legal because T is covariant and Mammal is convertible to Animal
x.D(new Fish()); // legal because IR.D takes an Animal
And you just tried to grow hair on a fish.
The "out" means "T is only used in output positions". You are using it in an input position.