第四章 方法和参数

来源:互联网 发布:淘宝代运营销售好做吗 编辑:程序博客网 时间:2024/05/16 05:17

1、命名空间
命名空间是一种分类机制,用于组合功能相关的所有类型。命名空间支持分级,级数可以任意,例如:Microsoft.Win32.NetWorking。

命名空间主要用于按照功能组织类型,以便更好的理解和查找类型。除此之外,命名空间还有助于防止类型名次冲突。

 

2、using

2.1 using指令

使用完全限定的命名空间名称太长,使用using指令可以在程序中直接使用命名空间中的类型,例如:

using System

static void main()

{

    Console.Write("abc");

}

using指令不会导入任何嵌套命名空间中的类型,嵌套命名空间必须显式的导入。

例如,即使使用using System这样的using指令,也不能在使用System的子命名空间的类型时省略System。例如,代码中要使用System.Text.StringBuilder类型,那么必须再添加一个using System.Text的using指令,而不能写成text.StringBuilder。

2.2 using别名

可以利用using为命名空间或者类型取一个别名。其用途是可以消除两个同名类型的歧义或缩写长类型名。例如,System.Timers和System.Threading两个命名空间下都Timer类型,如果同时引入了这两个命名空间,则Timer类型存在歧义。可以通过using别名的方式消除歧义。

using System.Threading;

using CountDownTimer  = System.Timers.Timer;

static void main()

{

    CountDownTimer timer;

}

2.3 using语句

 通过using语句可以控制资源的生存周期,创建的对象会在using语句结束时被销毁,出了using的作用域后会调用对象的Dispose方法,在Dispose方法内部会自动调用Close方法。

using(TextReader reader = new StreamReader(fileName))

{

    ... ...

}

 

3、方法参数

3.1 引用参数(ref)

在形参的前面加上ref,则指定了该形参接收的实参的引用(而不是值类型)。如果被调用的方法参数被指定为ref,那么调用者在调用方法时,要在传递实参的前面加上ref前缀。而且调用者必须在传递实参之前对实参进行初始化。

static void main()

{

    int n = 0;

    func(ref n);

}

static void func(ref int number)

{

    number = number + 1;

}

3.2 输出参数(out)

在形参的前面加上out,则指定了该形参为返回类型,out参数在功能上和使用上和ref几乎一致,唯一的区别是,如果参数标记为out,编译器会核实方法中所有正常返回的代码路径中是否对out参数进行赋值,没有赋值则编译器报错。

out类型参数克服了方法只能返回一个值的限制。

3.3 属性和方法调用不允许作为ref或out参数值使用

ref和out参数值在内部实现时,需要将内存的地址传给目标方法。但是,由于属性可能是虚属性或是只读、只写属性,因此不能传递存储地址。所以,不能将属性作为ref或out参数值传递。同样的道理也适用于方法调用。

3.4 可变长度的参数(params)

在方法声明的最后一个参数之前添加params关键字,并将该参数声明为数组,则该参数可以接收任意长度的数据

static void main()

{

    func(1,2,3);

    func(1,2,3,4,5,6);

}

static void func(params int[] numbers)

{

    ... ...

}

 

4、异常捕获

使用try块将有可以引发异常的代码包围起来,try代码块后紧跟着一个或多个catch代码块,当try代码块中的代码发生异常,则会跳转至与异常对应的catch块汇中

static void main()

{

    try

    {

        int age = int.Parse(System.Console.ReadLine());

    }

    catch(FormatException )

    {

        ... ...

    }

    catch(Exception exception)

    {

        ... ...

    }

}

如果从控制台获取的字符串无法转换成int类型,int.Parse()会引发System.FormatException类型异常,会执行catch(FormatException)代码块中的代码。

异常处理的顺序非常重要,catch必须按照从具体到最不具体排列。System.Exception是最不具体的数据类型,它是所有异常数据类型的基类,所以它应该出现在异常处理的最后。

在catch代码块可以跟一个finally代码块,如果加了finally代码块,无论是正常离开try,还是异常离开try,finally代码块就一定会执行。即使try代码块中有return语句,finally代码块也会在return之前执行。

原创粉丝点击