您好,欢迎访问三七文档
当前位置:首页 > IT计算机/网络 > 图形图像 > C2008程序设计实践教程(课后简答题答案)
第二章:C#编程基础三、简答题1、变量是什么?它是怎么存储数据的?变量(Variable)是指用于容纳一个值在内存中的一块专属的存储位置。必须为每一个变量指定一个唯一的名称,使用这个唯一的名称访问这个变量中存储的值。2、引用类型的变量和数值类型的变量有什么不同之处?数值类型的变量和引用类型的变量,两者最根本区别在于:数值类型的变量本身包含他们的数据,而引用类型的变量包含的是,指向包含数据的内存的引用或者叫句柄。对于数值类型,每个变量有一份自己的数据复制,因而也就不能通过操作其中的一个来影响到另一个。而对于引用类型,两个变量有可能引用同一个对象,因而也就可能通过操作其中的一个变量来影响也被另一个变量引用的对象4怎么改变数据类型?什么地方需要强制转换数据类型?C#提供了两个类型转换的形式:隐式类型转换和强制显示类型转换。数据从“小类型”到“大类型”的转换时为隐式类型转换,从“大类型”到“小类型”的转换为显式类型转换,显示类型转换需要如“(type)data”一般的括号转换操作符。也就是说,将被转换的数据类型包含在目标的数据类型取值范围之内,就可以使用隐式类型转换。反之则必须使用显式类型转换。但是需要注意的是,使用显式类型转换时,数所转换后的结果可能会与想象中的结果不一致,这是“大类型”的存储字节要比“小类型”的存储字节多。如果强制转换,可能发生数据丢失的情况。5跳转语句和条件分支语句有什么不同之处?条件语句又称为条件选择语句,他判定一个表达式的结果是真假(是否满足条件),根据结果判断是执行那个语句块。条件语句分为If语句和Switch语句两种方法。很多的时候,我们需要程序从一个语句块转到别一个语句块,因为C#提供了许多可以立即跳转程序另一行代码执行的语句,这些跳转语句包括:Goto语句、Break语句和Continue语句。6循环语句都有什么特点,有什么共通之处?循环语句是让程序重复的执行某个程序块,直到某个特定的条件表达式结果为假才结束执行语句块。While,do-While,For循环语句,虽然格式不同,但它们有着共同的特点,都实用于循环结构的程序设计。在程序设计的过程中,都具有如下三条内容:(1)循环体的设计。(2)循环条件的设计。(3)循环入口的初始化工作。循环体语句的正确执行,依赖于循环的条件,循环的条件依赖循环入口时的初始化工作,一环紧扣一环。循环体中按排哪些语句,要从分析具体问题入手,前后呼应,合乎逻辑。并且能确保循环能够终止。而且结论正确。While,do-While语句的使用,它的循环条件的改变,要靠程序员在循环体中去有意安排某些语句。而For语句却不必。使用For语句时,若在循环体中想去改变循环控制变量,以期改变循环条件。无异于画蛇添足。While循环,do-While循环适用于未知循环的次数的场合,而For循环适用于已知循环次数的场合。使用哪一种循环又依具体的情况而定。凡是能用For循环的场合,都能用While,do-While循环实现,反之则未必。7、枚举类型有什么样的优势,在程序中是怎么处理数据的?Enum类型(枚举类型)是一组命名常量的集合,或者说是用户定义的整数类型的集合。在声名一个枚举的时候,要指定该枚举可以包含的一组可接受的实例值。同时可以创建一系列的容易记忆的名称,让程序更容易理解。每一种枚举都有一种类型,除Char之外的所有整型都可以作为枚举类型的基本类型。枚举访问时所用的修饰符遵守访问修饰符和类或结构的访问修饰符的规则。声明为命名空间成员的枚举可以有Public或Internal访问属性。枚举使用New关键字修饰时,则表时他隐藏一个被继承的成员。并且枚举不能派生。第三章:对象和类型三、简答题1简述类和结构的异同。类是对一系列具有相同性质对象的抽象,是对对象共同特征的描述。类是C#中的一种重要的复合数据类型,是组成C#程序的基本要素,它封装了一类对象的状态和方法。而结构是C#程序员用来定义自己的值类型的最普遍的机制。结构比枚举更强大,因为它提供函数、字段、构造函数、操作符和访问控制。结构是C#程序员用来定义自己的值类型的最普遍的机制。结构与类有很多相似之处:结构可以实现接口,并且可以具有与类相同的成员类型。然而,结构在几个重要方面不同于类:结构为值类型而不是引用类型,并且结构不支持继承。结构的值存储在“堆栈上”或“内存”。2、简要说明public、private和protected修饰符的访问权限。public:公共成员,完全公开,没有访问限制。private:私有成员,在类的内部才可以访问。protected:保护成员,该类内部和继承类中可以访问。3、简单介绍构造函数和析构函数。构造函数是在实例化对象时自动调用的函数,它们必须与所属的类同名,且不能有返回类型,每个类都有自己的构造函数。通常使用构造函数来初始化字段的值。析构函数类似于构造函数,但是在CLR检测到不再需要某个对象时调用。在声明析构函数时,它的名称必须与类名相同,但前面有一个~符号。声明的语法格式为:~类名(){撤销实例的语句}和构造函数一样,析构函数被自动调用时不能被显式地调用。使用析构函数的条件是:没有任何代码要使用一个实例。析构函数以调用构造函数相反的顺序被调用,因此也有人叫它“逆构造函数”。4、说明什么是重载构造函数,举例说明如何实现构造函数的重载。C#构造函数的重载C#中的构造函数也可以应用方法重载.C#中有默认构造函数,也可以定义带参数的构造函数.构造函数必须与类同名,并且不能有返回值.所以C#构造函数重载相当于不同数量的参数方法重载.classC1{publicC1():this(){}publicC1(Strings){//……}}5.、简要介绍Object类。所有的.NET类都派生于System.Object。如果在定义类时没有指定其基类,那么编译器就会默认该类派生于Object。其重要性在于,除了自己定义的方法和属性外,还可以访问为Object定义的许多公共或受保护的成员方法,这些方法可以用于自己定义的所有其他类中。第四章:继承和多态三、简答题1、简述继承和继承的类型。继承是面向对象程序设计中一个很重要的特性,它是关于一个类怎样从另一个类中共享特性和行为的术语。C#中继承类称为派生类或子类,被继承类称为基类或父类。派生类能够继承基类的所有的操作、属性(Attribute)、特性(Property)、事件以及这些内容的实现方法,但继承得到的成员也受访问限制,即使派生类继承得到基类成员,也可能无法访问。通过继承,一个类可以用作多种类型:可以用作它自己的类型、任何基类型,或者在实现接口时用作任何接口类型。这称为多态性。面向对象编程中,有两种截然不同的继承类型:实现继承和接口继承。2、简要说明如何实现继承。基类是对派生类的抽象,派生类是对基类的具体化,是基类定义的延续。如果类或结构在继承基类的同时也派生于接口,则用逗号分隔基类和接口。如果在类定义中没有指定基类,C#编译器就默认System.Objectj是基类。3、简述派生类中构造函数的几种情况。派生类中构造函数分为两种情况:无参数的构造函数和带参数的构造函数。在基类中添加一个无参数的构造函数来替换默认的构造函数,那么它可以隐式地被派生继承。如果基类中定义了带有参数的构造函数,则此构造函数必须被继承且在派生类中实现构造函数。同时提供将参数传递给基类构造函数的途径,以保证在基类进行初始化时能获得必须的数据,在实现构造函数时使用base关键字。4、说明抽象类和密封类的用法。有时候基类并不与具体的事物相联系,而是只表达一种抽象的概念用以为它的派生类提供一个公共的界面,为此C#中引入了抽象类(abstractclass)的概念。抽象类不能实例化,而抽象方法没有执行代码,必须在非抽象的派生类中重写。显然,抽象方法也是虚拟的(但不需要提供virtual关键字,如果提供了该关键字,就会产生一个语法错误)。如果类包含抽象方法,那么该类也必须声明是抽象的。抽象类和抽象方法都用abstract来声明,声明代码如下所示:abstractclassBuilding//声明抽象类{privatebooldamaged=false;//字段publicabstractdecimalCalculateHeatingCost();//抽象方法}C#中使用sealed来声明密封类和密封方法。对于类来说,表示不能继承该类;对于方法来说,表示不能重写该方法。下面是定义密封类和密封方法的实现代码:sealedclassSealedClass//定义密封类{publicsealedvoidSealedMethod()//定义密封方法{}}5、简述多态性,并实现简单多态。多态性是面向对象程序设计中的又一个重要概念。在C#中,多态性的定义是:同一操作作用于不同的类的实例,不同的类将进行不同的解释,最后产生不同的执行结果。C#中支持两种类型的多态性:即编译时的多态性和运行时的多态性。编译时的多态性是通过重载来实现的,而运行时的多态性通过虚成员实现。多态性不仅对派生类很重要,对基类也很重要。任何情况下,使用基类实际上都可能是在使用已强制转换为基类类型的派生类对象。基类的设计者可以预测到其基类中可能会在派生类中发生更改的方面。6简述接口定义,并实现简单接口派生。从某种意义上说,接口是一种特殊的抽象类,但更甚于抽象类。抽象类是抽象单元,类中可以定义抽象方法或已经实现的方法。接口定义了更深的特性,接口中只包含常量和方法定义,这些方法是类必须实现的行为类型,但没有任何方法或变量的实现。创建接口时使用关键字interface,如下面代码所示:修饰符interface接口名{//方法或属性}接口的定义类似于类定义,但它的成员都是没有实现的,这与抽象类中定义方法是相同的。接口的修饰符可以是public、protected、protectedinternal、internal、private或new。关键字interface后面紧跟接口名称。第五章:数组三、简答题1、数组的概念是什么?简单数组也称之为一维数组,它是数组的最简单形式,可以包含同一类型的多个元素。他的数值数组元素默认值为零,数组的索引由零开始。具有n个元素的数组索引是从0至n-1。同时呢,数组可以包含任何类型的元素,包括数组类型。但数组中的数据类型必须为相同的数据类型。2、在程序中使用数组可以起到什么作用?很多时候,使用数组可以在很大程度上缩短和简化程序代码,因为可以通过上标和下标值来设计一个循环,可以高效地处理多种情况。3、如何访问数组中的元素?数组初始化之后就可以使用索引器访问其中的元素了。那么索引器又是什么呢?索引器可以理解为数组的每个元素编号。对于C#索引器目前来说,只支持整数类型的参数。索引器的开始标号为0,最大的索引数为元素个数减1。4、多维数组和锯齿数组的区别是什么?首先定义不同多维数组:privateint[,]_multi;数组的数组(也即锯齿数组)privateint[][]_jagged;再次实例化不同多维:_multi=newint[10,10];锯齿数组:_jagged=newint[2][];_jagged[0]=newint[5];_jagged[1]=newint[9];第3访问遍历方式不同:多维:foreach(intein_multi){Console.Write(e.ToString());}锯齿数组:foreach(int[]rowin_multi){foreach(int[]einrow){Console.Write(e.ToString());}}第4可定义维度不同多维的每个维度固定,锯齿数组每个维度不固定,因此得名锯齿数组。最后性能的差异:多维:维度长度固定,利用这个特性,编译器可以生产更加高效的初始代码锯齿:数组越大维数越多,初始化的代码越多,列方向遍历的效率低5、接口在实现时的规则是什么?显式实现接口成员:为了实现接口,类可以定义显式接口成员执行体。显式接口成员执行体可以是一个方法、一个属性、一个事件或
本文标题:C2008程序设计实践教程(课后简答题答案)
链接地址:https://www.777doc.com/doc-2904591 .html