zoukankan      html  css  js  c++  java
  • 基本类型接口(二、EIMI)

     144调用接口方法详解

    145接口方法的隐式和显式调用

    146泛型接口

    147 泛型接口和接口约束

    148实现具有多个方法名和签名的多个接口

    149用显示接口方法实现改进编译时类型安全

     class Program
        
    {
            
    public static void Main() {
                SomeValueType sv 
    = new SomeValueType(5);
                Object o1 
    = new object();
                Int32 n 
    = sv.CompareTo(sv);//装箱操作
                
    // n = sv.CompareTo(o1);//编译通过,出现运行时错误

                OtherValueType ov 
    = new OtherValueType(5);
                Object o2 
    = new object();
                n 
    = ov.CompareTo(ov);//没有进行装箱操作
                
    // n = ov.CompareTo(o2);//编译时错误

                Console.WriteLine(n);
                Console.ReadLine();
            }

        }

        
    //未使用EIMI
        internal struct SomeValueType : IComparable {
            
    private Int32 m_x;
            
    public SomeValueType(Int32 x) {
                m_x 
    = x;
            }

            
    public Int32 CompareTo(Object other) {
                
    return (m_x - ((SomeValueType)other).m_x);
            }

        }

        
    //使用EIMI
        internal struct OtherValueType : IComparable {
            
    private Int32 m_x;
            
    public OtherValueType(Int32 x){
                m_x 
    = x;
            }

            
    public Int32 CompareTo(OtherValueType other) {
                
    return (m_x - other.m_x);
            }

            Int32 IComparable.CompareTo(Object other) 
    {
                
    return CompareTo((OtherValueType)other);
            }

        }
     1410谨慎使用显示接口方法实现

     //
        
    //internal class Base : IComparable {
        
    //    //显式接口方法
        
    //    Int32 IComparable.CompareTo(Object o) {
        
    //        Console.WriteLine("Base.ComparaTo");
        
    //        return 0;
        
    //    }
        
    //}
        
    //internal class Derived : Base,IComparable {
        
    //    //接口实现的公共方法
        
    //    public Int32 CompareTo(Object o){
        
    //        Console.WriteLine("Derived.ComparaTo");
        
    //        //调用基类的CompareTo会导致错误
        
    //        //base.CompareTo(o);
        
    //        return 0;
        
    //    }
        
    //}
        
    //正确定义Base和Derived
        internal class Base : IComparable
        
    {
            
    //显式接口方法
            Int32 IComparable.CompareTo(Object o)
            
    {
                Console.WriteLine(
    "Base's IComparable ComparaTo");
                
    return 0;
            }

            
    //基类的虚方法
            public virtual Int32 CompareTo(Object o)
            
    {
                Console.WriteLine(
    "Base's virtual ComparaTo");
                
    return 0;
            }

        }

        
    internal class Derived : Base, IComparable
        
    {
            
    //也是接口实现的公共方法
            public override Int32 CompareTo(Object o)
            
    {
                Console.WriteLine(
    "Derived.ComparaTo");
                
    return base.CompareTo(o);
            }

        }
    1411设计:基类还是接口

  • 相关阅读:
    mongodb(2)
    mongodb(1)
    分片集群
    副本集 集群
    java连接腾讯云上的redis
    maven打包
    生成ftp文件的目录树
    从ftp获取文件并生成压缩包
    android 连续点击退出程序
    Android之完美退出方法
  • 原文地址:https://www.cnblogs.com/tenghoo/p/1205515.html
Copyright © 2011-2022 走看看