首页 > 代码库 > C#基础知识篇(三)-----------C#笔记

C#基础知识篇(三)-----------C#笔记

一.方法

1. 什么叫做方法?

    方法就是对一段代码的重用的机制。

2. 方法的定义:

                 [访问修饰符] [static] 返回值类型 方法名()

                 {

                         方法体;

                 }

                 注意:用[]修饰的都是可选的。

3. 需要注意的细节:

            命名规则:方法名开头大写,参数名开头小写,参数名、变量名要有意义。

4. 方法的参数:

                1>在方法名后面括号内定义变量就叫做定义这个方法的参数(形参)。

                2>在方法()中我们定义多个参数时,参数之间用逗号分隔,不管参数之间的类型是否相同,都不能像定义同类型的多个变量时:如:int a,b,c,d;定义参数只能

                   一个数据类型后面跟一个变量名.因为参数的类型可以不同,所以肯定不支持定义多个同类型的变量那样定义)。

                3>方法的参数是可以带默认值的,如果方法的参数带了默认值,那么我们在调用这个方法时就可以不为这个参数传值。如果不为其传值那么将使用的是参数默认值,

                    如果传了参数,参数的值就是实参的值。

                4>如果方法的参数有的带默认值,有的不带默认值,那么带默认值的参数必须出现在参数列表的最右侧。若方法中有带默认值的参数,那我们在传参的时候可以个数不一致,

                    但需要赋值的参数的类型位置要相对应。

5>显示的为方法的形参赋值.语法:方法名(形参名:实参)。用显示方法为参数赋值可以不根据顺序来赋值。但个数和类型要相对应。

6>params1个关键字.只能用来修饰方法的参数,并且被修饰的参数只能是一个一维数组,其它参数都不行。

           a.在给params修饰的参数(一维数组)赋值时,可以赋一个一维数组,但也可以直接给元素的值,每个值用逗号分隔。因为C#编译器在编译的时候会把这些数据封装到一个数组

             (只是这个数组的长度由调用者决定),所以实际上参数还是只有一个数组,传递的时候也是以数组传递的。

           b.被params修饰的参数必须要放在参数列表的最后.因为params修饰的一维数组长度不确定,若后面还有参数编译器无法识别哪些是属于params修饰的参数的,还是其他参数的。

              所以只能放到最后。

           c.被params修饰的参数在参数列表中最多只能出现1次.

           d.在为params修饰的参数传递的时候,也可以1个也不传.,因为数组长度可以为0;

           e.在方法的内部通过判断数组的长度是否为0 来判断用户是否传递了元素的值.

           f.如果构成重载,那么在调用的时候 会先去匹配不带params的方法. 如果不带params的不能匹配 才会再去找带params的匹配

二.返回值

a.为什么会有返回值?

    因为当调用者需要用到方法中的参数时,我们就需要方法给我们返回参数的值了。

   1>return是一个关键字,在方法中用来返回方法的返回值和立即结束本(当前的方法,即return所在的方法)方法的。语法:return 值;

   2>ref 是1个关键字, 只能用来修饰方法的参数(言外之意就是变量等不能被ref修饰). 任意的参数都可以使用ref来修饰.

            1> 如果方法的参数带了ref,那么实参也要带上ref

            2> 当我们为ref修饰的形参赋值时,赋的不是传进来的实参值,而是实参变量的内存地址。所以这就是为什么我们在方法内部修改局部变量的值外边也发生了改变。

                 因为实际上我们改变的就是外面实参的值。

            3> 当我们在为ref修饰的形参传值时,在传值前必须把实参变量进行初始化。

            4> 在为ref形参传递值的时候,必须要给1个变量 不能给1个常量,因为ref传递的是变量的地址.

            5> 被ref修饰的参数不能带默认值。因ref要求传递变量地址,而实参不是变量地址。

   3>out是1个关键字, 只能用来修饰方法的参数(言外之意就是变量等不能被out修饰). 任意的参数都可以使用out来修饰.

            1> 如果方法的参数带了out,那么实参也要带上out

            2> 当我们为out修饰的形参赋值时,赋的不是传进来的实参值,而是实参变量的内存地址。所以这就是为什么我们在方法内部修改局部变量的值外边也发生了改变。

                 因为实际上我们改变的就是外面实参的值

            3> 被out修饰的参数,可以在方法外面不赋值,但在方法内部一定要赋值,并且是在使用之前就要赋值。

            4> 在为out形参传递值的时候,必须要给1个变量 不能给1个常量,因为out传递的是变量的地址.

            5> .因为out要求传递变量的地址,所以out修饰的参数不能带默认值.

   4>ref和out异同:

                       1> ref在实参传递之前实参必须要有值。而out可以没有值。

                       2> out在方法内部并且在使用之前就必须赋值,而ref在内部可以不赋值。

                       3> 总结:即ref的实参在外面必须赋值,而out的参数必须在内部使用前赋值。不管是ref还是out它们都是传递的变量地址,它们都是修改的实参的值。

   总结返回值:

           通过return我们可以返回一个数据,或者是一个数据集。但这要求数据的数据内型必须相同或者是相兼容。所以return一般用于只有一个返回值或者是数据类型相同的一个集合。

           而ref和out是通过参数来返回值,它们一般用于需要返回多个不同数据类型的值。

三. 方法的调用

1> 在同一命名空间下,由static修饰的方法我们可以通过:类名.方法名(参数)来调用。

2> 在同一命名空间下没有被static修饰的方法都必须通过new关键字创建实列后,用实列名.方法名(参数)调用。

3> 不在同一命名空间下的,先必须把命名空间引进来,再来创建对象的实列来调用方法。静态方法就直接:类名.方法名

四.方法的重载

a. 什么叫做方法的重载?

    一般在同一个类中(或者跟父类中),方法名相同,并且方法的参数个数不同,或者相对应位置上的参数类型不同,才能构成重载。

b.方法的重载跟返回值没半点关系,只和参数有关(前提方法名相同)

五.变量的作用域

1. 局部变量:

                a. 什么叫做局部变量?

                    方法中定义的变量叫做局部变量,其作用域从定义开始,到其所在的大括号结束为止。