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

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

委托测试:
    public delegate T Func1<T, T1>(T1 t);
   
    public
 class FuncTest {
        
public readonly Func1<longlong> 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<longlong> _Test;

        
public FuncInAGetterTest() {
            _Test 
= Fib;
        }

        
public Func1<longlong> 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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/262976.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AS3 调用外部SWF中元件库中的元件 【转】

参考文章&#xff1a; http://www.blueidea.com/tech/multimedia/2008/5842_2.asp 本文来自CSDN博客&#xff0c;转载请标明出处&#xff1a;http://blog.csdn.net/djy1135/archive/2009/11/13/4807925.aspx 一、目的 bb.swf的元件库中有一个元件&#xff0c;在aa.swf中调用这个…

好文章,被架构师秒杀之后

.jdk1.5新增的功能------》2.字符流和字节流的区别&#xff0c;使用场景&#xff0c;相关类 >>>3.线程安全的概念&#xff0c;实现线程安全的几种方法 >>>4.抽象类和接口的区别&#xff0c;使用场景 >>>5.hash算法的实现原理&#xff0c;hash…

出路在哪里?出路在于思路!智者无敌

有人工作&#xff0c;有人继续上学&#xff0c;大家千万不要错过这篇文章&#xff0c;能看到这篇文章也是一种幸运&#xff0c;真的受益匪浅&#xff0c;对我有很大启迪&#xff0c;这篇文章将会改变我的一生&#xff0c;真的太好了&#xff0c;希望与有缘人分享&#xff0c;也…

电缆电压降计算

电缆电压降计算 UI*Z*L I电缆通过的电流 Z电缆阻抗 L电缆长度 阻抗Z可以通过电缆手册中给出的公式计算转载于:https://www.cnblogs.com/tihua/archive/2007/11/23/969627.html

C# 动态添加SEO 信息,不和静态页面重复和叠加

动态添加SEO 信息&#xff0c;不和静态页面重复和叠加&#xff0c;就一个方法&#xff0c;用到了做个记录&#xff0c;以后直接用就OK了&#xff0c;需要的同学也可以直接拿去用。 1 /// <summary> 2 /// 动态设置 SEO 信息 3 /// </summary> 4 /// <pa…

SVN“验证位置时发生错误”的解决办法

验证位置时发生错误:“org.tigris.subversion.javahl.ClientException...... 验证位置时发生错误:“org.tigris.subversion.javahl.ClientException: RA layer request failed svn: Server sent unexpected return value (403 Forbidden) in response to OPTIONS request for h…

Day_03-函数和模块的使用

使用函数求阶乘 使用while循环的代码&#xff1a; m float(input(m ))n float(input(n ))mn m - nfm 1while m ! 1:fm * mm - 1fn 1while n ! 1:fn * nn - 1fmn 1while mn ! 1:fmn * mnmn - 1print(fm // fn // fmn)定义函数块&#xff1a; def C_N_M(parm):fmn 1for …

Visual Studio Team System 2008 Team Suite (90-day Trial)(转)

Visual Studio Team System 2008 Team Suite (90-day Trial) 相关介绍&#xff1a; http://www.microsoft.com/downloads/details.aspx?familyidD95598D7-AA6E-4F24-82E3-81570C5384CB&displaylangen 直接下载地址&#xff1a; http://download.microsoft.com/download/d/…

xml02 XML编程(CRUD)增删查改

XML解析技术概述 Demo2.java import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import org.w3c.dom.Document; public class Demo2 { public static void main(String args[])throws Exception { //1.创建工程 DocumentBuilderFac…

猜数字

写一个猜数字脚本&#xff0c;当用户输入的数字和预设数字&#xff08;随机生成一个小于100的数字&#xff09;一样时&#xff0c;直接退出&#xff0c;否则让用户一直输入&#xff0c;并且提示用户的数字比预设数字大或者小。#!/bin/bashmecho $RANDOMn1$[$m%100]while :do …

3DMax插件和它的3DXI接口

3DXI是3DMax提供给游戏开发者的一套数据读取接口&#xff0c;之前它被称作为IGame。最近一直在搞Ogre的插件相关的文档都很少我相信搞这个的人很多&#xff0c;但是有时间整理拿出来共享的资料实在是太少Ogre自带的maxExplorer只是xml格式&#xff0c;二进制数据的导出竟然未完…

ASP.NET Web Game 架构设计1--服务器基本结构

ASP.NET Web Game 架构设计1--服务器基本结构 1. 基本结构图 2. 系统组成与角色 整个系统大体上分为三个部分&#xff1a;1.网页客户端。2.IIS Web服务器。3.数据库及逻辑服务器。其中Web服务器不处理任何逻辑&#xff0c;它的作用只有两点&#xff1a;1.承载用户。…

人人网 Windows Phone 7 应用开发起步

目前&#xff0c;人人网在国内高校学生中的普及率非常高。前段时间&#xff0c;大概是11月下旬的样子&#xff0c;人人网发布了Windows Phone 7客户端的公测版。我想&#xff0c;Windows Phone 7本地化的优劣&#xff0c;直接关系到其将来在国内的市场份额。而诸如人人等针对学…

XP Sp2下双机通过无线网卡实现Internet共享

两台均有无线网卡、装有XP SP2系统的计算机如何实现共享Internet上网呢&#xff0c;请参考一下步骤&#xff1a; 1、打开两台计算机的无线网络连接属性&#xff0c;并切换至“无线网络配置”页签。2、点中右下角的高级按钮设置&#xff0c;选中最下面的“仅计算机到计算机” 和…

SimpleDateFormat解析的时候字符串过长问题

竟然不会报错&#xff1b; try {SimpleDateFormat dateFormatFrom new SimpleDateFormat("yyyyMMddHHmmss");String dateStr "2015080910400000";Date parse dateFormatFrom.parse(dateStr);System.out.println(parse);} catch (Exception e) {e.printS…

C#面向对象设计模式第九讲:Composite 组合模式(结构型模式)

&#xff08;根据MSDN Webcast相关课程整理&#xff09; 由俄罗斯套娃讲起。娃娃里又包含另一个娃娃&#xff0c;最后那个不包含任何娃娃。 组合模式&#xff0c;采用树型结构来实现普遍存在的对象容器&#xff0c;将本原一对多的复杂的关系&#xff0c;转换成一对一的简单关系…

https://enhancer.io

enhancer.io 转载于:https://juejin.im/post/5d4aad7bf265da03bf0f2d01

chmod命令详细用法

指令名称 : chmod 使用权限 : 所有使用者 使用方式 : chmod [-cfvR] [--help] [--version] mode file... 说明 : Linux/Unix 的档案调用权限分为三级 : 档案拥有者、群组、其他。利用 chmod 可以藉以控制档案如何被他人所调用。 参数 : mode : 权限设定字串&#xff0c;格式如下…

是用Entity.Save(),还是用DAL.Save(Entity e)

是用Entity.Save()&#xff0c;还是用DAL.Save(Entity e) 自从上一次写关于ORM的文章已经是几个月前的事情了&#xff0c;在这里先贴一下文章的地址&#xff0c;如果大家感兴趣的话可以去看看。 1、支持差异数据保存的数据库实体类设计——处女作 2、支持差异数据保存的数据库实…

Docker for Windows

安装条件&#xff1a;必须是 Win10 Pro 或者 Enterprise version. 转载于:https://www.cnblogs.com/qijiage/p/9261258.html