Q-->question        A-->answer        M-->mention
          The Chapter 8th  Method
M:内联代码的优点==>
  其可以使JIT编译器优化代码,移除额外的方法调用,从而提高代码运行时的性能.

M:类型转换==>若需要转换为基元类型时,编译器知道如何生成转换对象的代码.

M:CRL支持仅返回值不同而其他全一样的方法签名,如在转换操作符就出现此情况.

M:CLR允许使用按引用传递参数来取代按值传递参数,C#中使用关键字out或ref,它在生成的元数据中表明为引用类型

Q:out与ref的区别?
A:1.初始化=>ref为调用者实例化,out为被调用者实例化
  2.值=>out在返回之前必须为变量赋值,ref为调用者必须先给它赋值,但从CLR的角度看它们等效

M:CLR允许基于方法对out和ref参数的使用来重载方法(指和其他方法),但不允许存在out和ref区别的重载,因为其元数据表示是相同的.
for example==>   void M1(out Point p)和void M1(Point p)           //通过
                            void M2(out Point p)和void M2(ref Point p)     //不允许

M:checked和unchecked使用准则==>
1.写代码时,将可能发生非预期溢出的代码放到一个checked中
2.写代码时,将允许发生溢出的代码显示置入unchecked中,如校验和
3.对于未使用上述两个关键字,希望在发生溢出时抛出一个异常

M:在使用ref参数时,必须确保实参类型和形参类型完全一致,否则不能通过编译,如string不能隐式转换到object,但可以通过泛型来解决<T>

Q:何为可变数量的参数?
A:1.只有方法的最后一个参数才能标记为可变的,用params标记
  2.该参数必须标记为一维数组,但类型不限
  3.任意数量,任意类型的参数用object[]
  4.对可变参数调用会造成一定性能损失,因为其必须在堆上分配内存以及引起GC

M:声明方法参数类型时,应尽可能地指定最弱的类型,并且最好在其基类上定义接口,如:IEnumerable<T>好于IList<T>,而在声明返回类型时应昼为最强类型,如FileStream好于Stream

M:CLR不支持常量方法和参数(也就是参数或方法的关键字const修饰符)

encapsulation  封装

posted on 2007-06-06 09:03  晓木  阅读(221)  评论(0编辑  收藏  举报