这里定义了一个接口,在Person类中实现这个方法 
interface Compare
    {
        int CompareTo(object other);
     
    }
    public class Person : Compare
    {
        public int Age { get; set; }
        public int CompareTo(object value)
        {
            if (value == null)
            {
                return 1;
            }
            Person otherPerson = (Person)value;
            if (this.Age < otherPerson.Age)
            {
                return -1;
            }
            else if (this.Age > otherPerson.Age)
            {
                return 1;
            }
            else
            {
                return 0;
            }        }    }在这里调用这个接口
static void Main(string[] args)
        {
            Person p1 = new Person();
            Person p2 = new Person();            p1.Age = 100;
            p2.Age = 15;            if (p1.CompareTo(p2)>0)
            {
                Console.WriteLine("p1比p2大");            }
            else if (p1.CompareTo(p2) <0)
            {
                Console.WriteLine("p1比p2小");
            }
            else
            {
                Console.WriteLine("p1.p2一样大");
            }
            
            Console.Read();
        }
问题1:p1和p2是如何把值传过去的,传给了谁,经过比较之后把值又如何返回,返回给了谁?问题2:如果在Main中不给p1,p2进行赋值,就会返回"p1.p2一样大",想让他返回“请复制”,该如何操作?小白学习中,请大佬多帮助

解决方案 »

  1.   

    这是你写的吗?
    问题1:p1和p2是person类的对象,p1.Age = 100;就是对这个public int Age { get; set; }属性进行赋值。 if (p1.CompareTo(p2)>0)这里p1.CompareTo()就是调用person类继承的接口的CompareTo()功能,因为这个功能参数是object类型,所以p2作为对象参数传过去,传到哪里?传到Person类里的public int CompareTo(object value){}这个方法,然后value就是p2,接着你Person otherPerson =(Person)value;自然otherPerson就是p2了,最后你进行判断if (this.Age < otherPerson.Age){},其中this就是当前的if (p1.CompareTo(p2)>0)中的p1,所以你会判断p1.Age和p2.Age谁大。
    问题2:思路看能否自理
                
            
      

  2.   

    如果p1是null,调用compareto就出错,object null错
    在public int CompareTo(object value)
    里面可以判断
    if (value == null)
    {
    Console.WriteLine("请赋值");
    return;
    }
    if (!(value is Person))
    {
    Console.WriteLine("p2不是合法的person");
    return;
    }