• 是否非要用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

  • 相关阅读:
    20155313 2016-2017-2《Java程序设计》课程总结
    java第四次实验
    java第五次实验
    20155313 实验三《Java面向对象程序设计》实验报告
    20155313 2016-2017-2 《Java程序设计》第十周学习总结
    20155311《Java程序设计》实验五(网络编程与安全)实验报告
    学号20155311 2016-2017-2《Java程序设计》课程总结
    20155311高梓云补交的Mypc课下实践
    20155311 《Java程序设计》实验四 (Android程序设计)实验报告
    20155311 实验三 敏捷开发与XP实践 实验报告
  • 原文地址:https://www.cnblogs.com/guaiguai/p/963343.html
Copyright © 2020-2023  润新知