zoukankan      html  css  js  c++  java
  • 接口

    一、显示接口方法实现(EIMI)

    将定义方法的那个接口的名称作为方法的前缀

        public class SimpleType : IDisposable
        {
            public void Dispose()
            {
                Console.WriteLine("SimpleType Dispose");
            }
            //定义EIMI不允许指定可访问性。会自动设置为private。EIMI方法不能标记为virtual
            void IDisposable.Dispose()
            {
                Console.WriteLine("IDisposable Dispose");
            }
        }
    
        class Program
        {
    
            static void Main(string[] args)
            {
                SimpleType s = new SimpleType();
                s.Dispose();
                IDisposable idis = s;
                idis.Dispose();
                Console.ReadKey();
            }
        }
    View Code

    二、使用泛型接口的好处

    1,泛型接口提供了出色的编译时留下安全性

    2,处理值类型时装箱次数会少很多

    3,类可以实现同一个接口若干次,只要每次使用不同的类型参数

        public class Number : IComparable<Int32>, IComparable<string>
        {
            public int CompareTo(string other)
            {
                throw new NotImplementedException();
            }
    
            public int CompareTo(int other)
            {
                throw new NotImplementedException();
            }
        }
    View Code

    三、EIMI最主要的问题

    1,没有文档解释类型具体如何实现一个EIMI方法,也没有“智能感知”支持
    2,值类型的实例在转换成接口时装箱
    3,EIMI不能由派生类型调用

    四、设计:基类还是接口

    1,IS-A(指“属于”,例如,汽车属于交通工具)对比CAN-DO(指“能做某事”,例如,一个类型能将自己的实例装换为另一个类型)关系
    类型只能继承一个实现。如果派生类和基类型建立不起IS-A关系,就不用基类而用接口。接口意味着CAN-DO关系。如果多种对象类型都“能”做某事,就为它们创建接口。例如,一个类型能将自己的实例转换为另一个类型(IConvertible),一个类型能序列化自己的实例(ISerializable)。注意,值类型必须从System.ValueType派生,所以不能从一个任意的基类派生。这时必须使用CAN-DO关系并定义接口
    2,易用性
    对于开发人员,定义从基类派生的新类型通常比实现接口的所有方法容易的多。基类型可提供大量功能,所以派生类型可能只需要稍作改动。而提供接口的话,新类型必须实现所有成员
    3,一致性实现
    无论接口协定订立得有多好,都无法保证所有人百分之百正确实现它。事实上,COM颇受该问题之累,导致有的COM对象只能正常用于Microsoft Office Word或者Microsoft Internet Explorer。而如果为基类型提供良好的默认实现,那么一开始得到的就是能正常工作并经过良好测试的类型。以后根据需要修改就可以了
    4,版本控制
    向基类添加一个方法,派生类型将继承新方法。一开始使用的就是一个能正常工作的类型,用户的源代码甚至不需要重新编译。而向接口添加新成员,会强迫接口的继承者更改其源代码并重新编译

    学习永不止境,技术成就梦想。
  • 相关阅读:
    Python 递归
    Python 面向过程编程
    Python 协程函数
    Python-第三方库requests详解
    Python 三元表达式
    linux copy
    centos 安装软件
    mysql 权限
    mysql 权限 备份
    android 开发
  • 原文地址:https://www.cnblogs.com/zd1994/p/6759421.html
Copyright © 2011-2022 走看看