想法我还不能系统的表达, 先发个测试, 大家看看有没有毛病.

委托测试:

    public delegate T Func1<T, T1>(T1 t);
   
    public class FuncTest {
        public readonly Func1<long, long> Test;

public FuncTest() {
            Test = Fib;
        }

private long Fib(long n) {
            if (n <= 1) {
                return n;
            }
            else {
                return Test(n - 1) + Test(n - 2);
            }
        }
    }

属性包装的委托:

    public class FuncInAGetterTest {
        private readonly Func1<long, long> _Test;

public FuncInAGetterTest() {
            _Test = Fib;
        }

public Func1<long, long> Test {
            get {
                return _Test;
            }
        }

private long Fib(long n) {
            if (n <= 1) {
                return n;
            }
            else {
                return Test(n - 1) + Test(n - 2);
            }
        }
    }

类测试:

    public class ClassTest {
        public long Test(long n) {
            if (n <= 1) {
                return n;
            }
            else {
                return Test(n - 1) + Test(n - 2);
            }
        }

}

接口测试:

    public interface IInterfaceTest {
        long Test(long n);
    }

public class InterfaceTest : IInterfaceTest {

private IInterfaceTest _interface;

public InterfaceTest() {
            _interface = this;
        }

private long Test(long n) {
            if (n <= 1) {
                return n;
            }
            else {
                return _interface.Test(n - 1) + _interface.Test(n - 2);
            }
        }

#region IInterfaceTest Members

long IInterfaceTest.Test(long n) {
            return Test(n);
        }

#endregion
    }

测试的代码:

        [TestMethod]
        public void ClassInterfaceDelegatePerformance() {
            //
            // TODO: Add test logic    here
            //

Stopwatch sw = new Stopwatch();
            ClassTest classTest = new ClassTest();
            IInterfaceTest interfaceTest = new InterfaceTest();
            FuncTest funcTest = new FuncTest();
            FuncInAGetterTest funcInAGetter = new FuncInAGetterTest();

long classResult = 0;
            sw.Start();

for (int i = 0; i < 20; i++)
                classResult = classTest.Test(30);

sw.Stop();
            long classTime = sw.ElapsedMilliseconds;

sw.Reset();
            sw.Start();

for (int i = 0; i < 20; i++)
                interfaceTest.Test(30);

sw.Stop();
            long interfaceTime = sw.ElapsedMilliseconds;

long funcResult = 0;
            sw.Reset();
            sw.Start();

for (int i = 0; i < 20; i++) {
                funcResult = funcTest.Test(30);
            }

sw.Stop();
            long funcTime = sw.ElapsedMilliseconds;

sw.Reset();
            sw.Start();
            for (int i = 0; i < 20; i++)
                funcInAGetter.Test(30);

sw.Stop();

Debug.WriteLine("Class: " + classTime.ToString() + ", Interface: " + interfaceTime.ToString() +
                " , Func: " + funcTime.ToString() + ", Func In a Getter: " + sw.ElapsedMilliseconds.ToString());
            Assert.IsTrue(classTime > funcTime, "Func is slower!");
            Assert.AreEqual(classResult, funcResult, "Not Equal!");
        }

}

结果:
Class: 1050, Interface: 1802 , Func: 1008, Func In a Getter: 1525

转载于:https://www.cnblogs.com/guaiguai/archive/2007/11/18/963343.html

是否非要用interface关键字来实现接口?相关推荐

  1. interface关键字的介绍及使用

    一.接口的定义与使用 格式: (1)接口体中的抽象方法和常量 JDK8版本之前,接口体中只有抽象方法,访问权限一定都是public(允许省略public.abstract修饰符).所有的static常 ...

  2. java接口的关键字_Java 接口 interface关键字

    1.概念:一种特殊的类,有全局常量和公共方法组成 定义接口用interface关键字 2.语法: //中括号"[ ]"的含义:你可继承父接口,也可不继承,是可选的 [修饰符] (a ...

  3. SDEI (Software Delegated Exception Interface) 软件委托异常接口

    1. 简介 system events是一个高优先级事件,必须由操作系统或hypervisor程序立即来完成,即使操作系统在其自己的临界区中执行(中断被屏蔽),系统事件可用于: Platform er ...

  4. API(Application Programming Interface,应用程序编程接口)

    API(Application Programming Interface,应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码 ...

  5. 阿里巴巴关键字搜索商品API接口(item_search-按关键字搜索商品接口),阿里巴巴搜索API接口

    阿里巴巴关键字搜索商品API接口(item_search-按关键字搜索商品接口),阿里巴巴搜索API接口可以获取到整个页面上看的到的数据,包括:商品ID,商品标题,商品图片,优惠价,价格,价格范围,销 ...

  6. 按关键字搜索商品接口

    一.接口参数说明: 提取关键字搜索商品接口各项数据,包含skuid.价格.收藏数.加购数.月销售量.主图.标题.详情页图片,价格低至几厘,量大甚至免费,详情请加我,或者私聊我,或者是点击更多API调试 ...

  7. 静态,关键字:static 接口,IUSB , API 接口关键字:interface

    //静态 //普通成员 //普通成员是属于对象的//静态成员 //静态成员属于类的//关键字:static //self关键字:在类里面代表该类 //在静态方法里面不能调用普通成员 //在普通方法里面 ...

  8. interface关键字

    接口的使用 1.接口使用interface来定义 2.Java中,接口和类是并列的两个结构 3.如何定义接口:定义接口中的成员3.1 JDK7及以前:只能定义全局常量和抽象方法>全局常量:pub ...

  9. java接口关于interface关键字

    http://it.100xuexi.com/view/otdetail/20120613/328a3769-a63f-4a7d-9d79-f83ce5e65ca5.html 转载于:https:// ...

最新文章

  1. cfs调度算法JAVA实现_关于CFS/BFS调度算法
  2. solver.prototxt文件里面参数含义及其设置
  3. 第五章 MongoDb索引优化 5.6
  4. mysql运营_为线上运营Mysql数据库设置从库
  5. php ftp login,关于php ftp_login()函数的10篇文章推荐
  6. sql date 函数_什么是SQL DATE()函数?
  7. 让自律成为你2019年的新名片,快来看这24种建议
  8. Win10问题篇:一次性永久关闭win10系统自动更新
  9. TCTrack: Temporal Contexts for Aerial Tracking
  10. 数据分析 超市条码_阜康市超市存包柜人脸识别 - 阜康办公、文教
  11. 图解PLC与变频器通讯接线
  12. 通用量子计算机和容错量子计算,量子计算机研究(下册)——纠错和容错计算...
  13. raspberry pi_如何使用Raspberry Pi和RetroPie构建自己的NES或SNES Classic
  14. Java高级特性 集合框架、泛型和Collection(一)(第二十三天)
  15. 利用Python实现模糊查找
  16. Elasticsearch 5.0 rollover api 学习
  17. 百度地图 JS API Marker自定义图标
  18. word分散对齐调整宽度_Word文档如何让不同字数对齐
  19. 删除浏览器的cookie
  20. 平头哥RVB2601板子上手——NETMGR与WIFI

热门文章

  1. 数学--数论--容斥定理完全解析(转)
  2. cpu和内存之间——地址映射
  3. PADS 非常用操作 备忘
  4. cygwin安装skyeye 所需的软件包列表
  5. 在window10 WSL 中编译 OpenJDK13
  6. 【边缘检测】BDCN:Bi-Directional Cascade Network for Perceptual Edge Detection
  7. 2021-07-3022
  8. csadcascascsacsa
  9. 康美药业财务造假给股民造成的损失,股民该怎么办?
  10. 在县城开一家彩票站,一个月能赚多少钱?