是否非要用interface关键字来实现接口?
生活随笔
收集整理的這篇文章主要介紹了
是否非要用interface关键字来实现接口?
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
想法我還不能系統(tǒng)的表達(dá), 先發(fā)個(gè)測(cè)試, 大家看看有沒(méi)有毛病.
委托測(cè)試:
??? 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);
????????????}
????????}
????}
類測(cè)試:
????public?class?ClassTest?{
????????public?long?Test(long?n)?{
????????????if?(n?<=?1)?{
????????????????return?n;
????????????}
????????????else?{
????????????????return?Test(n?-?1)?+?Test(n?-?2);
????????????}
????????}
????}
接口測(cè)試:
????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
????}
測(cè)試的代碼:
????????[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!");
????????}
????}
結(jié)果:
Class: 1050, Interface: 1802 , Func: 1008, Func In a Getter: 1525
委托測(cè)試:
??? 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);
????????????}
????????}
????}
類測(cè)試:
????public?class?ClassTest?{
????????public?long?Test(long?n)?{
????????????if?(n?<=?1)?{
????????????????return?n;
????????????}
????????????else?{
????????????????return?Test(n?-?1)?+?Test(n?-?2);
????????????}
????????}
????}
接口測(cè)試:
????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
????}
測(cè)試的代碼:
????????[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!");
????????}
????}
結(jié)果:
Class: 1050, Interface: 1802 , Func: 1008, Func In a Getter: 1525
轉(zhuǎn)載于:https://www.cnblogs.com/guaiguai/archive/2007/11/18/963343.html
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的是否非要用interface关键字来实现接口?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: weekendplan
- 下一篇: 电缆电压降计算