144调用接口方法详解145接口方法的隐式和显式调用146泛型接口147泛型接口和接口约束148实现 144调用接口方法详解 145接口方法的隐式和显式调用 146泛型接口 147 泛型接口和接口约束 148实
           145接口方法的隐式和显式调用
145接口方法的隐式和显式调用 146泛型接口
 146泛型接口 147 泛型接口和接口约束
147 泛型接口和接口约束 148实现具有多个方法名和签名的多个接口
 148实现具有多个方法名和签名的多个接口 149用显示接口方法实现改进编译时类型安全
149用显示接口方法实现改进编译时类型安全
 class Program
 class Program
 
     {
{
 public static void Main()
        public static void Main()  {
{ SomeValueType sv  new SomeValueType(5);
            SomeValueType sv  new SomeValueType(5); Object o1  new object();
            Object o1  new object(); Int32 n  sv.CompareTo(sv);//装箱操作
            Int32 n  sv.CompareTo(sv);//装箱操作 // n  sv.CompareTo(o1);//编译通过出现运行时错误
            // n  sv.CompareTo(o1);//编译通过出现运行时错误
 OtherValueType ov  new OtherValueType(5);
            OtherValueType ov  new OtherValueType(5); Object o2  new object();
            Object o2  new object(); n  ov.CompareTo(ov);//没有进行装箱操作
            n  ov.CompareTo(ov);//没有进行装箱操作 // n  ov.CompareTo(o2);//编译时错误
            // n  ov.CompareTo(o2);//编译时错误
 Console.WriteLine(n);
            Console.WriteLine(n); Console.ReadLine();
            Console.ReadLine(); }
        } }
    } //未使用EIMI
    //未使用EIMI
 internal struct SomeValueType : IComparable
    internal struct SomeValueType : IComparable  {
{ private Int32 m_x;
        private Int32 m_x;
 public SomeValueType(Int32 x)
        public SomeValueType(Int32 x)  {
{ m_x  x;
            m_x  x; }
        }
 public Int32 CompareTo(Object other)
        public Int32 CompareTo(Object other)  {
{ return (m_x - ((SomeValueType)other).m_x);
            return (m_x - ((SomeValueType)other).m_x); }
        } }
    } //使用EIMI
    //使用EIMI
 internal struct OtherValueType : IComparable
    internal struct OtherValueType : IComparable  {
{ private Int32 m_x;
        private Int32 m_x;
 public OtherValueType(Int32 x)
        public OtherValueType(Int32 x) {
{ m_x  x;
            m_x  x; }
        }
 public Int32 CompareTo(OtherValueType other)
        public Int32 CompareTo(OtherValueType other)  {
{ return (m_x - other.m_x);
            return (m_x - other.m_x); }
        }
 Int32 IComparable.CompareTo(Object other)
        Int32 IComparable.CompareTo(Object other)  {
{ return CompareTo((OtherValueType)other);
            return CompareTo((OtherValueType)other); }
        } }  1410谨慎使用显示接口方法实现
    }  1410谨慎使用显示接口方法实现
 //
 // //internal class Base : IComparable {
    //internal class Base : IComparable { //    //显式接口方法
    //    //显式接口方法 //    Int32 IComparable.CompareTo(Object o) {
    //    Int32 IComparable.CompareTo(Object o) { //        Console.WriteLine("Base.ComparaTo");
    //        Console.WriteLine("Base.ComparaTo"); //        return 0;
    //        return 0; //    }
    //    } //}
    //} //internal class Derived : Base,IComparable {
    //internal class Derived : Base,IComparable { //    //接口实现的公共方法
    //    //接口实现的公共方法 //    public Int32 CompareTo(Object o){
    //    public Int32 CompareTo(Object o){ //        Console.WriteLine("Derived.ComparaTo");
    //        Console.WriteLine("Derived.ComparaTo"); //        //调用基类的CompareTo会导致错误
    //        //调用基类的CompareTo会导致错误 //        //base.CompareTo(o);
    //        //base.CompareTo(o); //        return 0;
    //        return 0; //    }
    //    } //}
    //} //正确定义Base和Derived
    //正确定义Base和Derived internal class Base : IComparable
    internal class Base : IComparable
 
     {
{ //显式接口方法
        //显式接口方法 Int32 IComparable.CompareTo(Object o)
        Int32 IComparable.CompareTo(Object o)
 
         {
{ Console.WriteLine("Bases IComparable ComparaTo");
            Console.WriteLine("Bases IComparable ComparaTo"); return 0;
            return 0; }
        } //基类的虚方法
        //基类的虚方法 public virtual Int32 CompareTo(Object o)
        public virtual Int32 CompareTo(Object o)
 
         {
{ Console.WriteLine("Bases virtual ComparaTo");
            Console.WriteLine("Bases virtual ComparaTo"); return 0;
            return 0; }
        } }
    } internal class Derived : Base, IComparable
    internal class Derived : Base, IComparable
 
     {
{ //也是接口实现的公共方法
        //也是接口实现的公共方法 public override Int32 CompareTo(Object o)
        public override Int32 CompareTo(Object o)
 
         {
{ Console.WriteLine("Derived.ComparaTo");
            Console.WriteLine("Derived.ComparaTo"); return base.CompareTo(o);
            return base.CompareTo(o); }
        } } 1411设计基类还是接口
    } 1411设计基类还是接口 
 