Her*_*art 2 c# oop interface icomparable contravariance
在下面的代码中,我的目标是.NET 2.0 Framework.
我可以将Programmer(派生)对象传递给需要Person(基类)的Compare方法
但是,由于程序员是一个人(简单的OO概念),我声称在.NET 4.0中,IComparable接口声明中的'in'关键字是'矫枉过正':)
在我给微软写一封关于他们删除in关键字的电子邮件之前请尝试说服我:)
class Program
{
static void Main(string[] args)
{
var person = new Person();
var test = person.CompareTo(new Programmer());
}
}
internal class Person : IComparable<Person>
{
public int Id { get; set; }
public string Name { get; set; }
public int CompareTo(Person other)
{
return this.Id - other.Id;
}
}
class Programmer : Person
{
public string ProgrammingLanguage { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
共同和逆变不是关于你传递给方法的类型.它是关于包含方法的通用接口.
使用in以下代码是合法的:
IComparable<Person> foo = ...;
IComparable<Programmer> bar = foo;
Run Code Online (Sandbox Code Playgroud)
没有in它将是非法的.