我不知道發生了什麼在這裏,但我用下面的代碼得到一個編譯器錯誤:C#泛型接口協方差
namespace SO
{
interface IUser<PostType>
{
PostType Post { get; set; }
}
interface IPost<UserType>
{
UserType User { get; set; }
}
class User : IUser<Post>
{
//Implementation
}
class Post : IPost<User>
{
//Implementation
}
class SomeOtherClass
{
// Compiler Error: Cannot implicitly convert type 'SO.User' to
// 'SO.IUser<SO.IPost<SO.User>>'. An explicit conversion exists
// (are you missing a cast?)
IUser<IPost<User>> user = new User();
//Works Fine
IUser<Post> user = new User();
}
}
爲什麼我會得到一個錯誤,如果Post
是IPost<User>
一個亞型?我知道在這種情況下,我可以使用User
而不是IUser<IPost<User>>
,但我想知道爲什麼這不起作用。
你可以開始[點擊這裏](http://blogs.msdn.com/b/ericlippert/archive/2007/10/26/covariance-and-contravariance-in-c-part-five-interface-variance.aspx) – 2013-03-24 07:14:41