《C语言判断题题解》由会员分享,可在线阅读,更多相关《C语言判断题题解(8页珍藏版)》请在金锄头文库上搜索。
1、二 判断题(答案:全对)(1) 在一个程序内,没有任何类或结构可以包含一个以上的名为 Main 的方法,因为 Main 的定义限定它只能被用作应用程序的入口点。但允许使用 Main 的其他重载版本,前提是它们具有一个以上的参数,或者它们的唯一参数的类型不是 string。(2) 应用程序可由多个类或结构组成。在这些类或结构中,可能会有若干个拥有自己的 Main 方法,因为 Main 的定义限定它只能被用作应用程序的入口点。这样的情况下,必须利用某种外部机制(如命令行编译器的选项)来选择其中一个 Main 方法用作入口点。(3) 在 C# 中,每个方法都必须定义为类或结构的成员。(4) C# 程
2、序中的声明定义程序的构成元素。C# 程序是用命名空间组织起来的,一个命名空间可以包含类型声明和嵌套的命名空间声明。(5) 一个声明在它自已所属的那个声明空间 (declaration space) 中定义一个名称。除非是重载成员,否则,在同一个声明空间下若有两个以上的声明语句声明了具有相同名称的成员,就会产生编译时错误。(6) 同一个声明空间内绝不能包含不同类型的同名成员。例如,声明空间绝不能包含同名的字段和方法。(7)每个类、结构或接口声明创建一个新的声明空间。基类与派生类的声明空间无关,基接口与派生接口的声明空间无关。因此,允许在派生类或派生接口内声明与所继承的基类或基接口成员同名的成员。
3、(8)除了实例构造函数声明和静态构造函数声明外,类或结构成员声明不能引入与该类或结构同名的成员。(9)在嵌套声明空间中不可能声明与封闭它的声明空间中的局部变量或常量同名的局部变量或常量。但是,只要两个声明空间彼此互不包含,这两个声明空间就可以包含同名的元素。 (10)当类型从基类继承时,基类的所有成员(实例构造函数、析构函数和静态构造函数除外)都成为派生类型的成员。基类成员的声明可访问性并不控制该成员是否可继承。(11)命名空间没有访问限制。不可能把命名空间设置成私有的、受保护的或内部的,命名空间名称始终是可公开访问的。(12)命名空间隐式地具有 public 已声明可访问性。在命名空间声明中
4、不允许使用访问修饰符。(13)编译单元或命名空间中声明的类型可以具有 public 或 internal 已声明可访问性,默认的已声明可访问性为 internal。 (14)类成员可具有public、protected、internal 、protected internal、private等五种已声明可访问性中的任何一种,默认为 private 已声明可访问性。(15)声明为类成员的类型可具有public、protected、internal 、protected internal、private等五种已声明可访问性中的任何一种,而声明为命名空间成员的类型只能具有 public 或 inte
5、rnal 已声明可访问性。(16)结构成员可以具有 public、internal 或 private 已声明可访问性并默认为 private 已声明可访问性,这是因为结构是隐式地密封的。(17)枚举成员隐式地具有 public 已声明可访问性。在枚举成员声明中不允许使用访问修饰符。 (18)方法签名既不包含返回类型和 params 修饰符(它可用于指定最右边的形参),也不包含可选类型形参约束。 (19)虽然 out 和 ref 参数修饰符被视为签名的一部分,但是在同一个类型中声明的成员不能仅通过 ref 和 out 在签名上加以区分。在同一类型中声明了两个成员时,如果将这两个方法中带有 ou
6、t 修饰符的所有参数更改为 ref 修饰符会使这两个成员的签名相同,则会发生编译时错误。(20)在命名空间、类、结构或枚举成员的范围内,可以在位于该成员的声明之前的文本位置引用该成员。在局部变量的范围内,在位于该局部变量的声明之前的文本位置引用该局部变量是编译时错误。(21)当内部范围中的名称隐藏外部范围中的名称时,它隐藏该名称的所有重载匹配项。(22)运算符声明的规则使派生类不可能声明与基类中的运算符具有相同签名的运算符。因此,派生类中的运算符从不隐藏基类中的运算符。(23) 值类型的变量直接包含其数据,而引用类型的变量存储对其数据的引用 (reference),后者称为对象 (object
7、)。(24) 一个值类型或是结构类型,或是枚举类型。C# 提供称为简单类型 (simple type) 的预定义结构类型集。简单类型通过保留字标识。(25) 值类型的变量赋值会创建所赋的值的一个副本,而用类型的变量赋值复制的是引用而不是由引用标识的对象。(26) 任何类型都不可能从值类型派生,因此,所有值类型都是隐式密封的。(27) 所有值类型都隐式声明一个称为默认构造函数 (default constructor) 的公共无参数实例构造函数。默认构造函数返回一个零初始化实例,它就是该值类型的默认值 (default value) 。(28) 与任何其他实例构造函数一样,值类型的默认构造函数也
8、是用 new 运算符调用的。出于效率原因,实际上,不必故意调用它的构造函数。(29) 由于每个值类型都隐式地具有一个公共无参数实例构造函数,因此,一个结构类型中不可能包含一个关于无参数构造函数的显式声明。但允许结构类型声明参数化实例构造函数。(30) char 类型按分类归属为整型类型,但不存在从其他类型到 char 类型的隐式转换。(31) 在浮点型和 decimal 之间不存在隐式转换,如果没有显式地标出强制转换,就不可能在同一表达式中同时使用浮点操作数和 decimal 操作数。(32) bool 和其他类型之间不存在标准转换。具体而言,bool 类型与整型截然不同,不能用 bool 值
9、代替整数值,反之亦然。(33) 枚举类型是具有命名常量的独特的类型。每个枚举类型都有一个基础类型,该基础类型必须为 byte、sbyte、short、ushort、int、uint、long 或 ulong。枚举类型的值集和它的基础类型的值集相同。枚举类型的值并不只限于那些命名常量的值。(34) 类类型定义包含数据成员、函数成员和嵌套类型的数据结构,其中数据成员包括常量和字段,函数成员包括方法、属性、事件、索引器、运算符、实例构造函数、析构函数和静态构造函数。类类型支持继承,继承是派生类可用来扩展和专门化基类的一种机制。(35) 变量表示存储位置。每个变量都具有一个类型,它确定哪些值可以存储在
10、该变量中。(36) 在可以获取变量的值之前,变量必须已明确赋值 (definitely assigned) 。(37) 初始已赋值的变量有一个正确定义了的初始值,并且总是被视为已明确赋值。初始未赋值的变量没有初始值。(38) C# 定义了 7 类变量:静态变量、实例变量、数组元素、值参数、引用参数、输出参数和局部变量。(39) 用 static 修饰符声明的字段称为静态变量 (static variable)。静态变量在包含了它的那个类型的静态构造函数执行之前就存在了,在退出关联的应用程序域时不复存在。(40) 类的实例变量在创建该类的新实例时开始存在,在所有对该实例的引用都已终止,并且已执行
11、了该实例的析构函数(若有)时终止。(41) 出于明确赋值检查的目的,类的实例变量被视为初始已赋值,(42) 用 ref 修饰符声明的形参是引用形参 (reference parameter)。(43)用 out 修饰符声明的形参是输出形参 (output parameter)。(44) 由 local-variable-declaration 引入的局部变量不自动初始化,因此没有默认值。(45) 从 int、uint、long 或 ulong 到 float 以及从 long 或 ulong 到 double 的转换可能导致精度损失,但决不会影响到它的数量级。其他的隐式数值转换决不会丢失任何信
12、息。(46) 引用转换无论是隐式的还是显式的,都不会更改被转换的对象的引用标识。换言之,虽然引用转换可能更改引用的类型,但决不会更改所引用对象的类型或值。(47) int 类型的常量表达式(constant-expression)可以转换为 sbyte、byte、short、ushort、uint 或 ulong 类型(前提是常量表达式的值位于目标类型的范围内)。 (48) long 类型的常量表达式可以转换为 ulong 类型(前提是常量表达式的值非负)。 (49) 当重载一个二元运算符时,也会隐式重载相应的赋值运算符(若有)。例如,运算符 * 的重载也是运算符 *= 的重载。请注意,赋值运
13、算符本身 (=) 不能重载。(50) 函数成员是包含可执行语句的成员。函数成员总是类型的成员,不能是命名空间的成员。(51) 不能被显式调用的函数成员是析构函数和静态构造函数。(52) 当在要求有语句的上下文中不执行任何操作时,应该使用空语句。(53) 命名空间隐式地为 public,而且在命名空间的声明中不能包含任何访问修饰符。(54)命名空间是可扩充的,两个具有相同的完全限定名的命名空间声明是在为同一声明空间提供成员。(55) 可用于类类型的修饰符有:new、public、protected、internal、private、abstract、sealed、 static、partial。
14、(56)实例构造函数、析构函数和静态构造函数是不可继承的,但所有其他成员是可继承的,无论它们所声明的可访问性如何。但是,根据它们所声明的可访问性,有些继承成员在派生类中可能是无法访问的。 (57)可以将对某个派生类实例的引用视为对它的任一个基类实例的引用。 (58)虽然常量被认为是静态成员,但在常量声明中既不要求也不允许使用 static 修饰符。(59)在类的常量声明中允许使用的修饰符有:new、public、protected、internal、private。(60)在类的字段声明中允许使用的修饰符有:new、public、protected、internal、private、stati
15、c、readonly、volatile。(61)给只读字段的直接赋值只能作为声明的组成部分出现,或在同一类中的实例构造函数或静态构造函数中出现。(62)字段(无论是静态字段还是实例字段)的初始值都是字段的类型的默认值。在此默认初始化发生之前不可能看到字段的值,因此字段永远不会是“未初始化的”。(63)当初始化一个类时,首先将该类中的所有静态字段初始化为它们的默认值,然后以文本顺序执行各个静态字段初始值设定项。(64)创建类的一个实例时,首先将该实例中的所有实例字段初始化为它们的默认值,然后以文本顺序执行各个实例字段初始值设定项。(65)如果类中存在静态构造函数,则静态字段初始值设定项的执行在该静态构造函数即将执行前发生。否则,静态字段初始值设定项在第一次使用该类的静态字段之前先被执行,但实际执行时间依赖于具体的实现。(66)类的实例字段变量初始值设定项对应于一个赋值序列,它在当控制进入该类的任一个实例构造函数时立即执行。这些变量初始值设定项按它们出现在类声明中的文本顺序执行。(67)实例字段的变量初始值设定项不能引用正在创建的实例。因此,在变量初始值设定项中引用 this 是编译时错误,同样,在变量初始值设定项中引用正在创建实例的任何一个实例成员也是一个编译时