CLR Via C# 3rd 阅读摘要 -- Chapter 9 - Parameters

Optional and Named Parameters

1.  可以为方法参数,构造器参数,带参数的属性(C#的索引器)指定默认值;

2.  有默认值的参数必须在最右边。只有一个例外:params的数组参数;

3.  默认值必须是编译期可确定的常量。可以用default和new关键字来表示;

4. 注意别重命名参数名,因为调用者可能在他的代码中用了参数名;

5. 修改参数的默认值会有潜在危险;

6. 不能为ref 或 out的参数设置默认值;

7. 调用方法时参数可以按次序。但是,命名的参数必须始终在参数列表的最后;

8. 可以以命名参数的形式传入参数,但是所有需要的参数在编译时必须被传入;

9. C#不允许用,来忽略参数;

10. 如果参数定义有ref 或 out时,通过命名参数的方式调用时需要加上ref 或 out,但是C#在COM Interop时又允许忽略,娘的真绕。 

Implicitly Typed Local Variables

1. 说穿了不就是个var吗,只要注意不要跟dynamic搞混了就行。

Passing Parameters by Reference to a Method

1. 写代码时,必须搞清楚方法的每个参数是以值还是引用传递的;

2. out跟ref的差别:out,调用者不需要初始化传入的参数,被调用的方法必须在调用返回前初始化该参数,对该变量只写不读;ref,调用者必须初始化传入的参数,被调用的方法对该变量可读可写;

3. our和ref的共性:它们传递的都是实例的指针;

4. 可以使用ref 或 out来重载方法,但是不能用ref来重载out或者用out来重载ref。

Passing a Variable Number of Arguments to a Method

1. params关键字;

2. params的方法会带来性能的负面影响,除非显示的传入null;

3. 在定义params参数的方法时,可以考虑重载几个最常用的方法来避免性能问题。

Parameter and Return Type Guildlines

1. 当声明方法的参数类型时,通常指定最弱的类型,优先使用接口来代替基类;

2. 在声明方法的返回类型时,反过来,通常指定最强的类型;

3. 但是,如果有一个方法返回一个List<T>的对象, 那就很可能希望该方法的内部实现将来会改成返回T[],在这种情况下,返回IList<T>更合适。

Const-ness

1. C++的const关键字;

2. CLR不支持,没啥意思。

本章小结

  本章主要讲的就是有哪些途径把参数传入方法中,包括如何选择性的指定参数,命名参数,通过引用传递参数,如果定义可以接收可变参数的方法。最后还给出了方法的参数和返回值的参考指南。 

posted @ 2010-03-22 17:15  bengxia  阅读(183)  评论(0编辑  收藏  举报
无觅相关文章插件,快速提升流量