队中其它人编制的程序,等等。为了组织这些程序代码,使应用程序可以方便地使用这些程序代码,C#语言提出了名字空间的概念。名字空间是函数、类或组件的容器,把它们按类别放入不同的名字空间中,名字空间提供了一个逻辑上的层次结构体系,使应用程序能方便的找到所需代码。这和C语言中的include语句的功能有些相似,但实现方法完全不同。 1.18.1 名字空间的声明
用关键字namespace声明一个名字空间,名字空间的声明要么是源文件using语句后的第一条语句,要么作为成员出现在其它名字空间的声明之中,也就是说,在一个名字空间内部还可以定义名字空间成员。全局名字空间应是源文件using语句后的第一条语句。在同一名字空间中,不允许出现同名名字空间成员或同名的类。在声明时不允许使用任何访问修饰符,名字空间隐式地使用public修饰符。例子如下: using System;
namespace N1//N1为全局名字空间的名称,应是using语句后的第一条语句 { namespace N2//名字空间N1的成员N2
{ class A//在N2名字空间定义的类不应重名 { void f1(){};} class B
{ void f2(){};} } }
也可以采用非嵌套的语法来实现以上名字空间: namespace N1.N2//类A、B在名字空间N1.N2中 { class A
{ void f1(){};} class B
{ void f2(){};} }
也可以采用如下格式:
namespace N1.N2//类A在名字空间N1.N2中 { class A
{ void f1(){};} }
namespace N1.N2//类B在名字空间N1.N2中 { class B
{ void f2(){};} }
1.18.2 名字空间使用
如在程序中,需引用其它名字空间的类或函数等,可以使用语句using,例如需使用上节定义的方法f1()和f2(),可以采用如下代码: using N1.N2; class WelcomeApp { A a=new A(); a.f1(); } using N1.N2实际上是告诉应用程序到哪里可以找到类A。请读者重新看一下1.2.1节中的例
子。
1.19 非安全代码
在C和C++的程序员看来,指针是最强有力的工具之一,同时又带来许多问题。因为指针指向的数据类型可能并不相同,比如你可以把int类型的指针指向一个float类型的变量,而这时程序并不会出错。如果你删除了一个不应该被删除的指针,比如Windows中指向主程序的指针,程序就有可能崩溃。因此滥用指针给程序带来不安全因素。正因为如此,在C#语言中取消了指针这个概念。虽然不使用指针可以完成绝大部分任务,但有时在程序中还不可避免的使用指针,例如调用Windows操作系统的API函数,其参数可能是指针,所以在C#中还允许使用指针,但必须声明这段程序是非安全(unsafe)的。可以指定一个方法是非安全的,例如:unsafe void F1(int * p){?}。可以指定一条语句是非安全的,例如:unsafe int* p2=p1;还可以指定一段代码是非安全的,例如:unsafe{ int* p2=p1;int* p3=p4;}。在编译时要采用如下格式:csc 要编译的C#源程序 /unsafe。 习题
1. 从键盘输入姓名,在显示器中显示对输入姓名的问候。(提示:string为字符串类型,用语句string s=Console.ReadLine()输入姓名)
2. 构造函数和析购函数的主要作用是什么?它们各有什么特性?
3. 定义点类,数据成员为私有成员,增加有参数和无参数构造函数,在主函数中生成点类对象,并用字符显示点类对象的坐标。
4. 定义矩形类,数据成员为私有成员,增加有参数和无参数构造函数,在主函数中生成矩形类对象,并用字符显示矩形类对象的长、宽和矩形左上角的坐标。
5. 设计一个计数器类,统计键入回车的次数,数据成员为私有成员,在主程序中使用此类统计键入回车的次数。
6. 说明值类型和引用类型的区别,并和C语言相应类型比较。
7. 定义点结构,在主函数中生成点结构变量,从键盘输入点的位置,并重新显示坐标。 8. 定义整型一维数组,从键盘输入数组元素数值后,用循环语句显示所有元素的值。 9. 输入字符串,将字符串第一个字母和每个空格后的字母变为大写,其余字母为小写后输出。
10. 输入5个数,在每两个数之间增加3个空格后输出。
11. 编一个猜数程序,程序设定一个1位十进制数,允许用户猜3次,错了告诉比设定数大还是小,用switch语句实现。
12. C#语言for语句可以这样使用:for(int i;i<10;i++),请问,i的有效使用范围。 13. 用字符*在CRT上显示一个矩形。
14. 输入一个字符串,用foreach语句计算输入的字符串长度,并显示长度。 15. 输入两个数相加,并显示和。用异常语句处理输入错误。
16. 将1.6.3节中try–catch-finally语句例子改为try-finally和try–catch语句。 17. 定义点类,从点类派生矩形类,数据成员为私有成员,增加有参数和无参数构造函数,在主函数中生成矩形类对象,并用字符显示矩形类对象的长、宽和矩形左上角的坐标。 18. 重做12题,将数据成员用属性表示。
19. 定义一个类,将类外部的char数组元素都变为大写。主程序输入一个字符串,将其变为char数组,变为大写后输出每一个char数组元素。分别用类对象和静态函数实现。
20. 定义分数类,实现用符号+,-,*,/完成分数的加减乘除。在主函数中输入两个数,完成运算后输出运算结果。
21. 建立一个sroot()函数,返回其参数的二次根。重载它,让它能够分别返回整数、长整数和双精度参数的二次根。
22. 重新设计complex类,完成复数的+、-、*、/四则运算。
23. 定义点类,从点类派生矩形类和园类,主程序实现用同一个方法显示矩形和园的面积。 24. 重做19题,将点类定义为抽象类。
25. 重做19题,改为接口实现,即将点类改为接口。 啊
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库C#入门经典第三版(最新)(8)在线全文阅读。
相关推荐: