Why does this not compile?
public interface IConcrete { }
public class Concrete : IConcrete { }
public class Runner
{
public static void Main()
{
This has to do with covariance and contravariance. Eric Lippert wrote a lot about it earlier this year. (11 blog entries specifically on that topic.) The first one is Covariance and Contravariance in C#, Part One. Read that and search his blog for the rest of them. He provides detailed explanations of why this kind of thing is difficult.
Good news: some of the restrictions are lifted in C# 4.0.