关于“.WriteLine()是否需要这么多重载”的笔记

来源:未知 责任编辑:责任编辑 发表时间:2014-03-23 22:25 点击:
在Stack Overflow上看到一个较热门的问题,作笔记于此。 p>Console.WriteLine()有以下如此多的重载:

p>1 public static void WriteLine(string format, params object[] arg);

p>2 public static void WriteLine(string format, object arg0);

p>3 public static void WriteLine(string format, object arg0, object arg1);

p>4 public static void WriteLine(string format, object arg0, object arg1, object arg2);

p>5 public static void WriteLine(string format, object arg0, object arg1, object arg2, object arg3);

p>第一个重载能够替代后面的所有重载,为什么还需要后面的重载呢?

p>JaredPar给出了相关解答:

p>1.  params参数无法在间接方法绑定中自由的使用,如以下代码:

p>delegate void E(string format, object o1);

p>E e = Console.WriteLine;

p>如在之后按params重载的思路,使用e("{0}, {1}", "a", "b")将无法编译通过。对于指定参数的委托,如需要使用到WriteLine,非params的重载是应该存在的;

p> 

p>2.  并非所有的CLI都支持params的语法;

p> 

p>3.  从性能的角度来说,每次调用public static void WriteLine(string format, params object[] arg),都将分配托管堆空间用于存储对象,哪怕是如下代码:

p> 

p>     

p> 

p>复制代码

p>static void Main(string[] args)

p>{

p>       DemoFunc("a", "b", "c");

p>       DemoFunc("a", "b", "c");

p>}

p> 

p>public static void DemoFunc(params string[] val)

p>{

p>}

p>复制代码

p>复制代码

p>.method private hidebysig static void  Main(string[] args) cil managed

p>{

p>  .entrypoint

p>  // 代码大小       78 (0x4e)

p>  .maxstack  3

p>  .locals init ([0] string[] CS$0$0000)

p>  IL_0000:  nop

p>  IL_0001:  ldc.i4.3

p>  IL_0002:  newarr     [mscorlib]System.String

p>  IL_0007:  stloc.0

p>  IL_0008:  ldloc.0

p>  IL_0009:  ldc.i4.0

p>  IL_000a:  ldstr      "a"

p>  IL_000f:  stelem.ref

p>  IL_0010:  ldloc.0

p>  IL_0011:  ldc.i4.1

p>  IL_0012:  ldstr      "b"

p>  IL_0017:  stelem.ref

p>  IL_0018:  ldloc.0

p>  IL_0019:  ldc.i4.2

p>  IL_001a:  ldstr      "c"

p>  IL_001f:  stelem.ref

p>  IL_0020:  ldloc.0

p>  IL_0021:  call       void ConsoleApplicationDemo2.Program::DemoFunc(string[])

p>  IL_0026:  nop

p>  IL_0027:  ldc.i4.3

p>  IL_0028:  newarr     [mscorlib]System.String

p>  IL_002d:  stloc.0

p>  IL_002e:  ldloc.0

p>  IL_002f:  ldc.i4.0

p>  IL_0030:  ldstr      "a"

p>  IL_0035:  stelem.ref

p>  IL_0036:  ldloc.0
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
用户名: 验证码:点击我更换图片
最新评论 更多>>

推荐热点

  • cocos2d-x学习笔记(19)--label 、label atlas
  • cocos2d-x学习笔记(23)--地图的使用3--CCTMXLayer
  • Cocos2d-x学习(一):HelloWorld
  • cocos2dx在xcode下开发,编译到android上(2)
  • cocos2d 设置屏幕默认方向
  • Cocos2d-x 2.0 之 Actions “三板斧” 之一
  • cocos2d-x学习笔记(22)--地图的使用2(TMX) --Z-Order、AnchorPoi
  • cocos2d-x学习笔记(18)--游戏打包(windows平台)
  • cocos2d-x学习笔记(16)--spritesheet(精灵表单)
网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
Copyright © 2008-2015 计算机技术学习交流网. 版权所有

豫ICP备11007008号-1