您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 项目/工程管理 > C期末考试理论题(解答题)
1.引用类型的变量和数值类型的变量有什么不同之处?数值类型的变量本身包含他们的数据,而引用类型的变量包含的是指向包含数据的内存的引用或者叫句柄。对于数值类型,每个变量有一份自己的数据复制,因而也就不能通过操作其中的一个来影响到另一个。而对于引用类型,两个变量有可能引用同一个对象,因而也就可能通过操作其中的一个变量来影响也被另一个变量引用的对象2.怎么改变数据类型?什么地方需要强制转换数据类型?C#提供了两个类型转换的形式:隐式类型转换和强制显示类型转换。数据从“小类型”到“大类型”的转换时为隐式类型转换,从“大类型”到“小类型”的转换为显式类型转换,显示类型转换需要如“(type)data”一般的括号转换操作符。也就是说,将被转换的数据类型包含在目标的数据类型取值范围之内,就可以使用隐式类型转换。反之则必须使用显式类型转换。3.跳转语句和条件分支语句有什么不同之处?条件语句又称为条件选择语句,他判定一个表达式的结果是真假,根据结果判断是执行那个语句块。条件语句分为If语句和Switch语句两种方法。很多的时候,我们需要程序从一个语句块转到别一个语句块,因为C#提供了许多可以立即跳转程序另一行代码执行的语句,这些跳转语句包括:Goto语句、Break语句和Continue语句。4.循环语句都有什么特点,有什么共通之处?循环语句是让程序重复的执行某个程序块,直到某个特定的条件表达式结果为假才结束执行语句块。While,do-While语句的使用,它的循环条件的改变,要靠程序员在循环体中去有意安排某些语句。而For语句却不必。While循环,do-While循环适用于未知循环的次数的场合,而For循环适用于已知循环次数的场合。凡是能用For循环的场合,都能用While,do-While循环实现,反之则未必。While,do-While,For循环语句,虽然格式不同,但它们有着共同的特点,都实用于循环结构的程序设计。在程序设计的过程中,都具有如下三条内容:(1)循环体的设计。(2)循环条件的设计。(3)循环入口的初始化工作。5.枚举类型有什么样的优势,在程序中是怎么处理数据的?Enum类型(枚举类型)是一组命名常量的集合,或者说是用户定义的整数类型的集合。在声名一个枚举的时候,要指定该枚举可以包含的一组可接受的实例值。同时可以创建一系列的容易记忆的名称,让程序更容易理解。每一种枚举都有一种类型,除Char之外的所有整型都可以作为枚举类型的基本类型。枚举访问时所用的修饰符遵守访问修饰符和类或结构的访问修饰符的规则。声明为命名空间成员的枚举可以有Public或Internal访问属性。枚举使用New关键字修饰时,则表时他隐藏一个被继承的成员。并且枚举不能派生。1.简述类和结构的异同。结构与类有很多相似之处:结构可以实现接口,并且可以具有与类相同的成员类型。然而,结构在几个重要方面不同于类:结构为值类型而类是引用类型,结构不支持继承,尽管结构可以添加构造函数,但结构没有默认的构造函数以及析构函数,结构的值存储在堆栈上而类存储在堆上。2.简要说明public、private和protected修饰符的访问权限。public:公有,没有访问限制。private:私有,只有当前的应用程序或库才能访问。protected:只有从当前类和当前类的派生类中进行访问。3.简单介绍构造函数和析构函数。构造函数是在实例化对象时自动调用的函数,它们必须与所属的类同名,且不能有返回类型,每个类都有自己的构造函数。通常使用构造函数来初始化字段的值。析构函数类似于构造函数,但是在CLR检测到不再需要某个对象时调用。在声明析构函数时,它的名称必须与类名相同,但前面有一个~符号。声明的语法格式为:~类名(){撤销实例的语句}和构造函数一样,析构函数被自动调用时不能被显式地调用。使用析构函数的条件是:没有任何代码要使用一个实例。析构函数以调用构造函数相反的顺序被调用,因此也有人叫它“逆构造函数”。4.说明什么是重载构造函数,举例说明如何实现构造函数的重载。重载构造函数就是一个类中有两个或两个以上的构造函数,具有相同的名称不同的参数列表,调用的时候根据参数列表的不同来正确的调用。(举例代码略)5.简要介绍Object类。所有的.NET类都派生于System.Object。如果在定义类时没有指定其基类,那么编译器就会默认该类派生于Object。其重要性在于,除了自己定义的方法和属性外,还可以访问为Object定义的许多公共或受保护的成员方法,这些方法可以用于自己定义的所有其他类中。1.简述继承和继承的类型。继承是面向对象程序设计中一个很重要的特性,它是关于一个类怎样从另一个类中共享特性和行为的术语。C#中继承类称为派生类或子类,被继承类称为基类或父类。派生类能够继承基类的所有的操作、属性、特性、事件以及这些内容的实现方法,但继承得到的成员也受访问限制,即使派生类继承得到基类成员,也可能无法访问。通过继承,一个类可以用作多种类型:可以用作它自己的类型、任何基类型,或者在实现接口时用作任何接口类型。这称为多态性。面向对象编程中,有两种截然不同的继承类型:实现继承和接口继承。2.说明抽象类和密封类的用法。有时候基类并不与具体的事物相联系,而是只表达一种抽象的概念用以为它的派生类提供一个公共的界面,为此C#中引入了抽象类的概念。抽象类不能实例化,而抽象方法没有执行代码,必须在非抽象的派生类中重写,抽象方法也是虚拟的。如果类包含抽象方法,那么该类也必须声明是抽象的。抽象类和抽象方法都用abstract来声明,声明代码如下所示:abstractclassBuilding//声明抽象类{privatebooldamaged=false;//字段publicabstractdecimalCalculateHeatingCost();//抽象方法}C#中使用sealed来声明密封类和密封方法。对于类来说,表示不能继承该类;对于方法来说,表示不能重写该方法。下面是定义密封类和密封方法的实现代码:sealedclassSealedClass//定义密封类{publicsealedvoidSealedMethod()//定义密封方法{}}3.简述多态性,并实现简单多态。多态性:同一操作作用于不同的类的实例,不同的类将进行不同的解释,最后产生不同的执行结果。C#中支持两种类型的多态性:即编译时的多态性和运行时的多态性。编译时的多态性是通过重载来实现的,而运行时的多态性通过虚成员实现。多态性不仅对派生类很重要,对基类也很重要。任何情况下,使用基类实际上都可能是在使用已强制转换为基类类型的派生类对象。4.简述接口定义,并实现简单接口派生。从某种意义上说,接口是一种特殊的抽象类,但更甚于抽象类。抽象类是抽象单元,类中可以定义抽象方法或已经实现的方法。接口中只包含常量和方法定义,这些方法是类必须实现的行为类型,但没有任何方法或变量的实现。创建接口时使用关键字interface,如下面代码所示:修饰符interface接口名{//方法或属性}接口的定义类似于类定义,但它的成员都是没有实现的,这与抽象类中定义方法是相同的。接口的修饰符可以是public、protected、protectedinternal、internal、private或new。关键字interface后面紧跟接口名称。1.在程序中使用数组可以起到什么作用?有了数组,程序可以通过相同的变量名引用一系列的变量,并用秩或称为上标下标的整型索引来访问数组内的信息。很多时候,使用数组可以在很大程度上缩短和简化程序代码,可以通过上标和下标值来设计一个循环,高效地处理多种情况。2.如何访问数组中的元素?(1)数组初始化之后可以使用索引器访问其中的元素。(2)可以通过Foreach来迭代出数组的所有元素。3.多维数组和锯齿数组的区别是什么?(1)定义不同:多维数组:int[,]multi;数组的数组(也即锯齿数组):int[][]_jagged;(2)实例化不同:多维:int[,]multi=newint[10,10];锯齿数组:int[][]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)性能的差异:多维:维度长度固定,利用这个特性,编译器可以生产更加高效的初始代码,锯齿:数组越大维数越多,初始化的代码越多,列方向遍历的效率低1.接口在实现时的规则是什么?显式实现接口成员:为了实现接口,类可以定义显式接口成员执行体。显式接口成员执行体可以是一个方法、一个属性、一个事件或者是一个索引指示器的定义,定义与该成员对应的全权名应保持一致。继承接口实现接口具有不变性,但这并不意味着接口不再发展。派生的接口只继承了父接口的成员方法说明,而没有继承父接口的实现,接口继承允许多继承,一个子接口可以有多个父接口。重新实现接口:继承了接口实现的类可以对接口进行重实现。这个接口要求是在类定义的基类列表中出现过的。映射接口:类必须为在基类表中列出的所有接口的成员提供具体的实现。在类中定位接口成员的实现称之为接口映射2.Icomparer接口和IComparable接口的区别是什么?IComparable接口与IComparer接口的区别在于IComparable接口必须由要比较的类来执行,而IComparer接口独立于要比较的类,同时这也是Compare()方法定义两个比较接口的原因。3.说明创建自定义接口的步骤。从某种意义上说,接口是一种特殊的抽象类,但更甚于抽象类。抽象类是抽象单元,类中可以定义抽象方法或已经实现的方法。接口定义了更深的特性,接口中只包含常量和方法定义,这些方法是类必须实现的行为类型,但没有任何方法或变量的实现。创建接口时使用关键字interface,如下面代码所示:修饰符interface接口名{//方法或属性}1.简述C#支持的隐式转换类型。隐式转换就是系统默认的、不需要加以声明就可以进行的转换。在隐式转换过程中,编译器无需对转换进行详细检查就能够安全地执行转换。源类型目的类型Sbyteshort、int、long、float、double、decimalByteshort、ushort、int、uint、long、ulong、float、double、decimalShortint、long、float、double、decimalUshortint、uint、long、ulong、float、double、decimalIntlong、float、double、decimalUintlong、ulong、float、double、decimalLong/ulongfloat、double、decimalFloatdoubleCharushort、int、uint、long、ulong、float、double、decimal2.简述装箱和拆箱的过程。装箱和拆箱机制使得在C#类型系统中,任何值类型、引用类型和object(对象)类型之间进行转换,我们称这种转化为绑定连接。装箱转换:是指将一个值类型隐式地转换成一个object类型,或者把这个值类型转换成一个被该值类型应用的接口类型。把一个值类型的值装箱,也就是创建一个object实例并将这个值复制给这个object。拆箱转换:拆箱转换是指将一个对象类型显式地转换成一个值类型,或是将一个接口类型显式地转换成一个执行该接口的值类型。拆箱的过程分为两步:首先,检查这个对象实例,看它是否为给定的值类型的装箱值。然后,把这个实例的值复制给值类型的变量
本文标题:C期末考试理论题(解答题)
链接地址:https://www.777doc.com/doc-2907494 .html