版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第80页 共80页第1页 共80页一 选择题(35)(1) 下面是关于委托实例的描述,不正确的有哪些? (D)A委托(delegate)实例可以认为是这样的对象,它包含具有相同签名和返回值类型的有序方法列表,该方法的列表称为调用列表(invocation list);B当委托实例被调用时,它调用列表中的每一个方法;C由委托实例保存的方法可以来自任何类或结构,只要它们同时匹配委托的返回值和签名(包括ref和out修饰符);D调用列表中的方法可以是实例方法,不可以是静态方法。(2) 下面是关于委托类型的描述,不正确的有哪些? (D)A委托是类型,委托类型必须在被用来创建变量以及类型的实例之前声明;
2、B委托类型声明和所有类型声明一样,不需要在类的内部声明;C委托类型的声明看上去与方法的声明很相似,有返回类型和签名,返回类型和签名指定了委托接受的方法的形式;D委托类型的声明以delegate关键词开头,有方法主体。(3) 下面是关于创建委托对象的描述,不正确的有哪些? (B)A委托是引用类型,因此有引用和对象,在委托类型声明之后,可以声明变量并创建类型的对象;B可以使用带new运算符的对象创建表达式来创建委托对象,new运算符的操作数由委托类型名和一组方括号(包含作为调用列表中第一个成员的方法的名字)组成;C可以使用快捷语法来创建委托对象,它仅由方法说明符构成,之所以能使用快捷语法是因为在方
3、法名称和其相应的委托类型之间有隐式转换;D除了为委托分配内存,创建委托对象还会把第一个方法放入委托的调用列表。(4) 下面是关于委托对象操作的描述,不正确的有哪些? (B)A由于委托是引用类型,我们可以通过给它赋值来改变包含在委托变量中的引用,旧的委托对象会被垃圾回收器回收;B委托对象可以使用“-”运算符来“组合”,这个运算最终会创建一个新的委托对象,其调用列表是两个操作数的委托调用列表的副本的组合;C尽管术语组合委托(combining delegate)让我们觉得好像操作数委托对象被修改了,其实它们并没有被修改,委托对象是恒定的,委托对象被创建后不会再被改变;D我们可以通过使用+=运算符来
4、为委托对象增加新的方法或另一个委托对象;E我们还可以使用-=运算符从委托对象调用列表中移除方法或一个委托对象。(5) 下面是关于委托对象调用的描述,不正确的有哪些? (C)A可以像调用方法一样简单地调用委托对象;B用于调用委托对象的参数将会用于调用列表中的每一个方法(输出参数例外);C一个方法可以在调用列表中出现多次,当委托对象被调用时,这个方法只会被调用一次;D如果委托有返回值并且在调用列表中有一个以上的方法,调用列表中最后一个方法返回的值就是委托调用返回的值,调用列表中所有其他方法的返回值都会被忽略;E如果委托有引用参数,参数值会根据调用列表中的一个或多个方法的返回值而改变,在调用委托列表
5、中的下一个方法时,参数的新值(不是初始值)会传给下一个方法。(6) 下面是关于事件创建及使用的描述,不正确的有哪些? (B)A委托类型声明-事件和事件处理程序必须有共同的签名和返回类型,它们通过委托类型声明进行描述;B事件处理程序声明-这些在订阅者类中的方法(事件处理程序) 声明会在事件触发时被执行,它们需要有独立的方法,它们不可以是匿名方法或lambda表达式;C事件声明-事件发布者类中的声明,用来保存并调用事件处理程序;D事件注册-这段代码把事件处理程序添加到事件中;E触发事件的代码-发布者类中的这段代码,用来调用事件处理程序。(7) 下面是关于事件声明的描述,不正确的有哪些? (D)A发
6、布者类必须提供事件和触发事件的代码;B创建事件比较简单只需要委托类型和名字;C可以通过使用逗号分隔的列表在一个声明语句中声明一个以上的事件;D不可以使用static关键字让事件变成静态的。(8) 下面是关于事件的描述,不正确的有哪些? (C)A一个常见的误解是把事件认为是类型,然而它不是,事件是成员,我们不能使用对象创建表达式(new表达式)来创建它的对象;B事件必须声明在类或结构中,和其他成员一样;C能在一段可执行代码中声明事件;D事件成员被隐式自动初始化为null。(9) 下面是关于触发和订阅事件的描述,不正确的有哪些? (D)A在触发事件之前和null进行比较,从而查看是否包含任何事件处
7、理程序,如果事件是null,则表示没有;B触发事件使用事件名称,后面跟的参数列表包含在圆括号中,参数列表必须匹配事件的委托类型;C使用+=运算符来为事件增加事件处理程序;D事件处理程序可以是实例方法、静态方法,但不能是匿名方法和lambda表达式。(10) 下面是关于接口的描述,不正确的有哪些? (C)A接口是表示一组函数成员而不实现成员的引用类型,其他类型类和结构可以实现接口;B类或结构要实现接口必须在基类列表后面列出接口名称,必须为接口的每一个成员提供实现;C接口声明可以包含数据成员;D接口声明只能包含方法、属性、事件和索引等成员。 (11) 下面是关于接口的描述,不正确的有哪些? (D)
8、A接口成员的声明不能包含任何实现代码,而在每一个成员声明的主体后必须使用分号;B和类以及结构一样,接口声明还可以分隔成分部接口声明;C接口声明可以有任何的访问修饰符public、protected、internal或private;D接口的成员是隐式public的,允许有任何访问修饰符,包括public。(12) 下面是关于接口的描述,不正确的有哪些? (A)A只有类、数组和结构才能实现接口;B如果类实现了接口,它必须实现接口的所有成员;C如果类有基类又并需要实现接口,那么基类列表中的基类名称必须放在任何接口名称之前;D接口不仅仅是类或结构要实现的成员列表。它是一个引用类型。(13) 下面是关
9、于接口的描述,不正确的有哪些? (B)A类或结构可以实现任意数量的接口;B所有实现的接口必须列在基类列表中并以分号分隔(如果有基类名称,则在其之后);C如果一个类实现了多个接口,其中有一些接口有相同签名和返回类型的成员,类可以实现单个成员来满足所有包含重复成员的接口;D接口是引用类型,并且可以通过强制转换对象引用为接口类型来获取一个指向接口的引用,如果类实现了多个接口,我们可以获取每一个的独立接口类型的引用。(14) 下面是关于接口的描述,不正确的有哪些? (D)A实现接口的类可以把从它的基类继承的成员作为接口成员的实现;B如果有显式接口成员实现,类级别的实现是允许的,但不是必须的;C显式接口
10、成员实现只可以通过指向接口的引用来访问;D其他的类成员都可以直接访问显式接口成员实现。(15) 下面是关于接口的描述,不正确的有哪些? (C)A由于其他类不能直接访问显式接口成员实现,派生类的成员也不能直接访问它们,它们必须总是通过接口的引用来访问;B要指定某个接口继承其他的接口,应在接口声明中把基接口以逗号分隔的列表形式放在接口名称的冒号之后;C列表中的接口本身不可以有被继承的接口;D接口包含它声明的所有成员和所有基接口的成员。(16) 下面是关于Main方法的描述,不正确的有哪些? (A)A static void Main B static void Main(string args)
11、C static int Main() D static int Main(string args) (17) 下面是关于Main方法的描述,不正确的有哪些? (B)A Main必须声明为static;B Main可以被声明为类、枚举或结构的成员;C 如果Main被声明为private,其他程序集就不能访问它,只有执行环境才能启动程序;D 如果Main被声明为public,其他程序集和执行环境都可以调用它。(18) 下面是关于泛型的描述,不正确的有哪些? (C)A泛型允许我们声明类型参数化的代码,我们可以用不同的类型进行实例化;B我们可以用“类型占位符”来写代码,然后在创建类的实例时提供真实的
12、类型;C类型不是对象而是对象的模板,同样地,泛型类型也不是对象,而是对象的模板;D C#提供了5种泛型:类、结构、接口、委托和方法,注意,前面4个是类型,而方法是成员。(19) 下面是关于泛型类声明的描述,不正确的有哪些? (B)A在类名之后放置一组尖括号;B在尖括号中用句号分隔的占位符字符串来表示希望提供的类型,这被叫做类型参数(type parameter);C在泛型类声明的主体中使用类型参数来表示应该被替代的类型;D在泛型类型声明中没有特殊的关键词或标志,尖括号中的类型参数列表是将泛型类声明与普通类声明区分开的标志。(20) 下面是关于构造类的描述,不正确的有哪些? (B)A我们不能直接
13、从泛型类型创建类对象,首先,我们需要使用真实类型来替代占位符(类型参数)来创建构造类,然后从构造类创建一个真实类型对象;B要从泛型类构建类类型,列出类名字并在方括号中提供真实类型来替代类型参数,要替代类型参数的真实类型叫做类型实参(type argument);C编译器接受了类型实参并且替换泛型类主体中的相应类型参数,产生了构造类型;D可以从同一个泛型类型构建出很多不同的类型;每一个都是独立的类型,就好像它们都是独立的非泛型类型声明一样。(21) 下面是关于类型参数约束的描述,不正确的有哪些? (C)A要让泛型变得更有用,我们需要提供额外的信息让编译器知道参数可以接受哪些类型,这些额外的信息叫
14、做约束(constrain);B只有符合约束的实参才能用于类型参数;C约束使用while子句列出;D每一个有约束的类型参数有自己的where子句,如果形参有多个约束,它们在where子句中使用逗号分隔。(22) 下面是关于类型参数约束的where子句的描述,不正确的有哪些? (B)A它们在类型参数列表的关闭尖括号之后列出;B它们使用逗号分隔C它们可以以任何次序列出;D where是上下文关键词,所以可以在其他上下文中使用。(23) 下面是关于类型参数约束的描述,不正确的有哪些? (E)A 类名约束-只有这个类型的类或从它继承的类才能用作类型实参;B class约束-任何引用类型,包括类、数组、
15、委托和接口都可以用作实参;C struct约束-任何值类型都可以被用作类型实参;D 接口名约束-只有这个接口或实现这个接口的类型才能用作实参;E new()约束-任何带有公共构造函数的类型都可以用作实参,这叫做构造函数约束。(24) 下面是关于泛型类型的描述,不正确的有哪些? (D)A与泛型类相似,泛型结构可以有类型参数和约束;B泛型结构的规则和条件与泛型类是一样的;C泛型接口允许我们编写参数和接口成员返回类型是类型参数的接口;D泛型接口的声明和非泛型接口的声明差不多,但是需要在接口名称之后的方括号中提供有类型参数。(25) 下面是关于泛型接口的描述,不正确的有哪些? (B)A类型参数不同的泛
16、型接口是不同的接口;B不可以在非泛型类型中实现泛型接口;C实现泛型类型接口时,所有可能的类型实参组合必须不会在类型中产生两个重复的接口,泛型接口的实现必须唯一;D泛型接口的名字不会和非泛型冲突。(26) 下面是关于泛型委托和泛型方法的描述,不正确的有哪些? (C)A要声明泛型委托,在委托名称后、委托参数列表之前的尖括号中放类型参数列表;B泛型方法中类型参数的范围包括返回值、形参列表和约束子句;C泛型方法只能在泛型类以及结构和接口中声明,不能在非泛型类以及结构和接口中声明;D泛型方法和其他泛型一样,有类型参数列表和可选的约束。(27) 下面是关于类型转换的描述,不正确的有哪些? (D)A类型转换
17、(conversion)是接受一个类型的值并使用它作为另一个类型的等价值的过程;B有些类型的转换不会丢失数据或精度,语言会自动做这些转换,这叫做隐式转换;C从位数更少的源类型转换为位数更多的目标类型时,目标中多出来的位需要用0或1填充;D当从更小的无符号类型转换为更大的无符号类型时,目标类型多出来的最高位都以1进行填充,这叫做零扩展。(28) 下面是关于类型转换的描述,不正确的有哪些? (D)A对于有符号类型的转换而言,额外的高位用源表达式值的符号位进行填充,这样就维持了被转换的值的正确符号和大小,这被叫做符号扩展;B对于源类型的任意值在被转换成目标类型时会丢失值的情况,语言是不会提供这两种类
18、型的自动转换的,如果希望对这样的类型进行转换,就必须使用显式转换;C如果我们使用强制转换表达式,就意味着我们要承担执行操作可能会引起的丢失数据的责任;D除了标准转换,还可以为自定义类型定义显式转换,但是不可以为自定义类型定义隐式转换。(29) 下面是关于类型转换的描述,不正确的有哪些? (A)A还有一个预定义的转换类型,叫做装箱,它转换任何引用类型到object类型;B拆箱将装箱的值转换到原始类型;C引用类型转换接受源引用并返回一个指向堆中同一位置的引用,但是把引用“标记为其他类型;D所有引用类型可以被隐式转换为object类型。(30) 下面是关于类型转换的描述,不正确的有哪些? (D)A任
19、何类型可以隐式转换到它继承的接口;B类可以隐式转换到它继承链中的任何类和它实现的任何接口;C从0bject至到任何引用类型的转换必须采用显式引用转换;D从基类到从它继承的类的转换可以采用隐式引用转换。(31) 下面是关于类型转换的描述,不正确的有哪些? (D)A如果转换的类型不受限制,很可能会导致我们尝试引用在内存中实际并不存在的类成员,系统在运行时遇到它们则会抛出一个异常;B一个有关装箱的普遍误解是在被装箱的项上发生了一些操作,其实不是,它返回了副本的值的引用类型;C在装箱产生之后,有两份值原始值类型和副本的引用类型,每一个都可以独立操作;D装箱是显式转换。(32) 下面是关于类型转换的描述
20、,不正确的有哪些? (B)A拆箱(unboxing)是把装箱后的对象转换回值类型的过程;B拆箱是隐式转换;C拆箱时,系统会首先检测要拆箱的对象实际是否是值类型的装箱值;D拆箱时,系统会把对象里面的值类型的值复制到变量。(33) 下面是关于类型转换的描述,不正确的有哪些? (B)A只可以为类或结构定义用户自定义转换;B能重定义标准隐式转换或显式转换;C对于相同的源和目标类型,我们不能声明两个转换,一个是隐式转换而另外一个是显式转换;D隐式和显示转换的声明语法都需要public和static修饰符;E除了implicit和explicit关键词之外,隐式和显示转换的声明语法是一样的。(34) 下面
21、是关于自定义隐式和显示类型转换的条件的描述,不正确的有哪些? (D)A源类型和目标类型必须是不同类型;B源类型和目标类型不能通过继承关联,即源类型不能继承自目标类型,而目标类型也不能从源类型继承;C源类型和目标类型都不能是接口类型或object类型;D转换运算符必须是源类型和目标类型的成员。(35) 下面是关于is运算符和as运算符的描述,不正确的有哪些? (A)A is运算符只可以用于引用转换以及装箱和拆箱转换,能用于用户自定义转换;B as运算符和强制转换运算符类似,只是它不抛出异常;C 如果转换失败,as运算符把目标引用设置为 null而不是抛出异常;D 由于as运算符返回引用表达式,它
22、可以用作赋值中的源;E as运算符只能用于引用转换和装箱转换,它不能用于用户自定义转换或到值类型的转换。二 判断题(33全对)(1) 接口的成员是在接口中和该接口的所有基接口中声明的成员。严格地说,类 object 中的成员不是任何接口的成员。但是,在任何接口类型中都可访问类 object 中的成员。(2) 接口成员隐式地具有 public 已声明可访问性。在接口成员声明中不允许使用访问修饰符。 (3) C# 语言的类型划分为两大类:值类型 (Value type) 和引用类型 (reference type)。值类型和引用类型都可以为泛型类型 (generic type),泛型类型采用一个或
23、多个类型参数。类型参数可以指定值类型和引用类型。(4) 引用类型包括类类型、接口类型、数组类型和委托类型。(5) abstract 修饰符用于表示所修饰的类是不完整的,并且它只能用作基类。(6) 抽象类不能直接实例化,并且对抽象类使用 new 运算符会导致编译时错误。虽然一些变量和值在编译时的类型可以是抽象的,但是这样的变量和值必须或者为 null,或者含有对非抽象类的实例的引用(此非抽象类是从抽象类型派生的)。 (7) 允许(但不要求)抽象类包含抽象成员,抽象类不能被密封。(8) 当从抽象类派生非抽象类时,这些非抽象类必须具体实现所继承的所有抽象成员,从而重写那些抽象成员。(9) seale
24、d 修饰符用于防止从所修饰的类派生出其他类。如果一个密封类被指定为其他类的基类,则会发生编译时错误。密封类不能同时为抽象类。(10) 静态类不能显式指定基类或所实现接口的列表。 静态类隐式从 object 类型继承。 (11) 静态类只能包含静态成员,静态成员的可访问性不可为 protected 或 protected internal。常量和嵌套类型归为静态成员。 (12) 静态类中不能声明实例构造函数,并且对于静态类也不提供任何默认实例构造函数。(13) 每个类型形参最多只能有一个 where 子句,并且 where 子句可以按任何顺序列出。(14) where 子句中给出的约束列表可以包
25、括以下任一依此顺序排列的组成部分:一个主要约束、一个或多个次要约束以及构造函数约束 new()。主要约束可以是类类型、引用类型约束 (reference type constraint) class,也可以是值类型约束 (value type constraint) struct。次要约束可以是类型形参(type-parameter),也可以是接口类型(interface-type)。(15) 引用类型约束指定用于类型形参的类型实参必须是引用类型。所有类类型、接口类型、委托类型、数组类型和已知将是引用类型(将在下面定义)的类型形参都满足此约束。(16) 值类型约束指定用于类型形参的类型实参必须
26、是不可以为 null 值的类型。所有不可以为 null 的结构类型、枚举类型和具有值类型约束的类型形参都满足此约束。注意,虽然可以为 null 的类型被归为值类型,但是不满足值类型约束。具有值类型约束的类型形参还不能具有 constructor-constraint。(17) 如果约束是类类型、接口类型或类型形参,则该类型指定的是用于该类型形参的每个类型实参必须支持的最低“基类型”。(18) 如果类型形参的 where 子句包括构造函数约束(即具有 new() 的形式),则可以使用 new 运算符创建该类型的实例。用于具有构造函数约束的类型形参的任何类型实参都必须具有公共的无形参构造函数(任何
27、值类型都隐式地存在此构造函数),或者是具有值类型约束或构造函数约束的类型形参。(19) 如果一个实例构造函数中没有构造函数初始值设定项,将会隐式地添加一个 base() 形式的构造函数初始值设定项。(20) 当实例构造函数没有构造函数初始值设定项时,或仅具有 base(.) 形式的构造函数初始值设定项时,该构造函数就会隐式地执行在该类中声明的实例字段的初始化操作,这些操作由对应的字段声明中的 variable-initializers 指定。这对应于一个赋值序列,它们会在进入构造函数时,在对直接基类的构造函数进行隐式调用之前立即执行。这些变量初始值设定项按它们出现在类声明中的文本顺序执行。(2
28、1) 销毁一个实例时,按照从派生程度最大到派生程度最小的顺序,调用该实例的继承链中的各个析构函数。(22) 在结构的实例构造函数内,this 相当于一个结构类型的 out 形参,而在结构的实例函数成员内,this 相当于一个结构类型的 ref 形参。在这两种情况下,this 本身相当于一个变量,因而有可能对该函数成员调用所涉及的整个结构进行修改。(23) 结构的默认值就是将所有值类型字段设置为它们的默认值并将所有引用类型字段设置为 null 而产生的值。由于这个原因,结构不允许它的实例字段声明中含有变量初始值设定项。此限制只适用于实例字段。在结构的静态字段声明中可以含有变量初始值设定项。(24
29、) 一个接口定义一个协定。实现某接口的类或结构必须遵守该接口定义的协定。一个接口可以从多个基接口继承,而一个类或结构可以实现多个接口。(25) 接口可以包含方法、属性、事件和索引器。接口本身不提供它所定义的成员的实现。接口只指定实现该接口的类或结构必须提供的成员。(26) 如果一个类或结构实现某接口,则它还隐式实现该接口的所有基接口。(27) 一个接口声明可以声明零个或多个成员。接口的成员必须是方法、属性、事件或索引器。接口不能包含常量、字段、运算符、实例构造函数、析构函数或类型,也不能包含任何种类的静态成员。(28) 所有接口成员都隐式地具有 public 访问属性。接口成员声明中包含任何修
30、饰符都属于编译时错误。(29) 在方法调用、属性访问或索引器访问中,不能直接访问“显式接口成员实现”的成员,即使用它的完全限定名也不行。“显式接口成员实现”的成员只能通过接口实例来访问,并且在通过接口实例访问时,只能用该接口成员的名称来引用。(30) 显式接口成员实现中包含访问修饰符属于编译时错误,而且如果包含 abstract、virtual、override 或 static 修饰符也属于编译时错误。(31) 类的基类成员参与接口映射。(32) 继承的公共成员声明和继承的显式接口成员声明可以参与重新实现接口的接口映射过程。(33) 当类实现接口时,它还隐式实现该接口的所有基接口。与此类似,
31、接口的重新实现也同时隐式地对该接口的所有基接口进行重新实现。三 写出运行结果题(10)(1) 05using05namespace Page_237 class Program static void Main(string args) for (int x = 4; x 0) Console.WriteLine(0, x); x-; (3)using System;namespace Page_24212 class 12 static void Main( string args ) int x = 1; do Console.WriteLine( 0, x+ ); while ( x 3
32、 ); (4)using System;34namespace34 class Program static void Main( string args ) for ( int x=0; x 5; x+ ) if ( x 3 ) continue; Console.WriteLine( 0, x ); (5)using System;23namespace23 class Program private static void ShowFinally(int inVal) try if (inVal 10) Console. WriteLine(1); return; else Consol
33、e. WriteLine(2); finally Console.WriteLine(3); static void Main(string args) ShowFinally(20); 1212using System;namespace Page_299 class MyClass public static void PrintArg(string arg) try if (arg = null) ArgumentNullException myEx = new ArgumentNullException(arg); throw myEx; Console.WriteLine(arg);
34、 catch (ArgumentNullException e) Console.WriteLine(1); class Program static void Main() string s = null; MyClass.PrintArg(s); MyClass.PrintArg(2); 5,105,105,105,105,100,0using System;namespace Page_306 class CSimple public int X; public int Y; struct Simple public int X; public int Y; class Program
35、static void Main() CSimple cs1 = new CSimple(), cs2 = null; Simple ss1 = new Simple(), ss2 = new Simple(); cs2 = cs1; ss2 = ss1; cs1.X = ss1.X = 5; cs1.Y = ss1.Y = 10; Console.WriteLine(0,1, cs1.X, cs1.Y); Console.WriteLine(0,1, cs2.X, cs2.Y); Console.WriteLine(0,1, ss1.X, ss1.Y); Console.WriteLine(
36、0,1, ss2.X, ss2.Y); (8)using System;0,05,10namespace0,05,10 struct Simple public int X; public int Y; public Simple(int a, int b) X = a; Y = b; class Program static void Main() Simple s1 = new Simple(); Simple s2 = new Simple(5, 10); Console.WriteLine(0, 1, s1.X, s1.Y); Console.WriteLine(0, 1, s2.X,
37、 s2.Y); (9)using System;2030namespace2030 class MyClass public int MyField = 0; class Program static void Main() MyClass mcArray = new MyClass2; for (int i = 2; i 9); Console.WriteLine(n); 四 改错题【要求:只能修改一行】(9)(1)要求能通过编译且不能改变程序的功能和作用using System;namespace Page_347 class Program static void Main() int
38、total = 0; int arr1, = 10, 11 , 12, 13 ; foreach (var element in arr1) total += element; Console.WriteLine(0, 1, element, total); 答:“int arr1, = 10, 11 , 12, 13 ;”改为“int, arr1 = 10, 11 , 12, 13 ;”(2) 要求程序运行结果为using System;6namespace Page_3666 delegate int MyDel(); class MyClass int IntValue = 5; pub
39、lic int Add2() IntValue += 2; return IntValue; public int Add3() IntValue += 3; return IntValue; class Program static void Main() MyClass mc = new MyClass(); MyDel mDel = mc.Add2; mDel += mc.Add3; mDel += mc.Add2; Console.WriteLine(0, mDel(); 答:“Console.WriteLine(0, mDel();”改为“Console.WriteLine(0, m
40、Del() - 6);”(3) 要求能通过编译且不能改变程序的功能和作用using System;namespace Page_368 delegate void MyDel( ref int X ); class MyClass public void Add2( ref int x ) x += 2; public void Add3( ref int x ) x += 3; static void Main() MyClass mc = new MyClass(); MyDel mDel = mc.Add2; mDel += mc.Add3; mDel += mc.Add2; int x
41、 = 5; mDel(x ); Console.WriteLine( Value: 0, x ); 答:“mDel(x );”改为“mDel( ref x );”(4) 要求能通过编译且不能改变程序的功能和作用using System;namespace Page_377 class Program delegate double MyDel(int par); static void Main() MyDel del = delegate(int x) return x + 1; ; MyDel le1 = int x = return x + 1; ; MyDel le2 = (x) =
42、return x + 1; ; MyDel le3 = x = return x + 1; ; MyDel le4 = x = x + 1; Console.WriteLine(0, del(12); Console.WriteLine(0, le1(12); Console.WriteLine(0, le2(12); Console.WriteLine(0, le3(12); Console.WriteLine(0, le4(12); 答:“MyDel le1 = int x = return x + 1; ;”改为“MyDel le1 = (int x) = return x + 1; ;
43、”(5) 要求能通过编译且不能改变程序的功能和作用using System;namespace Page_173 class MyBaseClass public void Print() Console.WriteLine( This is the base class. ); class MyDerivedClass : MyBaseClass override public void Print() Console.WriteLine( This is the derived class. ); class SecondDerived : MyDerivedClass override
44、public void Print() Console.WriteLine(This is the second derived class.); class Program static void Main() SecondDerived derived = new SecondDerived(); MyBaseClass mybc = (MyBaseClass)derived; derived.Print(); mybc.Print(); 答:“public void Print()”改为“virtual public void Print()”(6) 要求能通过编译且不能改变程序的功能和
45、作用using System;namespace Page_399 class Program static void Main( string args ) var myInt = 20, 4, 16, 9, 2 ; Array.Sort( myInt ); foreach ( var i in myInt ) Console.Write( 0 , i ); 答:“var myInt = 20, 4, 16, 9, 2 ;”改为“var myInt = new 20, 4, 16, 9, 2 ;”(7) 要求程序运行结果为using System;2 4 9 16 20namespace P
46、age_4012 4 9 16 20 class MyClass : IComparable public int TheValue; public int CompareTo(object obj) MyClass mc = (MyClass)obj; if (this.TheValue mc.TheValue) return 1; return 0; class Program void PrintOut(MyClass mc) foreach (var m in mc) Console.Write(0 , m.TheValue); Console.WriteLine(); static
47、void Main() var myInt = new 20, 4, 16, 9, 2 ; MyClass mcArr = new MyClass5; for (int i = 0; i = MaxStack; bool IsStackEmpty get return StackPointer = 0; i-) Console.WriteLine(0, StackArrayi); class Program static void Main() var stackInt = new MyStack(); var stackString = new MyStack(); stackInt.Pus
48、h(3); stackInt.Push(5); stackInt.Push(7); stackInt.Print(); stackString.Push(1); stackString.Push(2); stackString.Print(); 答:(4) 要求程序运行结果为using System;101namespace101 struct PieceOfData private T _Data; public PieceOfData(T value) _Data = value; public Data get return _Data; set _Data = value; class
49、 Program static void Main() var intData = new PieceOfData(10); var stringData = new PieceOfData(1); Console.WriteLine(0, intData.Data); Console.WriteLine(0, stringData.Data); 答:T(5) 要求程序运行结果为using System;namespace Page_47051 interface IMyIfc51 T ReturnIt(T inValue); class Simple : IMyIfc public S Re
50、turnIt( inValue) return inValue; class Program static void Main() var trivInt = new Simple(); var trivString = new Simple(); Console.WriteLine(0, trivInt.ReturnIt(5); Console.WriteLine(0, trivString.ReturnIt(1); 答:S(6) 要求程序运行结果为using System;namespace Page_471 interface IMyIfc T ReturnIt(T inValue);
51、51 class Simple : IMyIfc, IMyIfcstring51 public int ReturnIt(int inValue) return inValue; public ReturnIt(string inValue) return inValue; class Program static void Main() Simple trivInt = new Simple(); Simple trivString = new Simple(); Console.WriteLine(0, trivInt.ReturnIt(5); Console.WriteLine(0, t
52、rivString.ReturnIt(1); 答:string(7) 要求程序运行结果为using System;28namespace28 public delegate TR Func(T1 p1, T2 p2); class Simple static public string PrintString(int p1, int p2) int total = p1 + p2; return total.ToString(); class Program static void Main() var myDel = new Func(Simple.PrintString); Console
53、.WriteLine(0, myDel(15, 13); 答:string3,5,7(8) 要求程序运行结果为3,5,7using System;namespace Page_481 static class ExtendHolder public static void Print( this Holder h) T vals = h.GetValues(); Console.WriteLine(0,t1,t2, vals0, vals1, vals2); class Holder T Vals = new T3; public Holder(T v0, T v1, T v2) Vals0
54、= v0; Vals1 = v1; Vals2 = v2; public T GetValues() return Vals; class Program static void Main(string args) intHolder = new Holder(3, 5, 7); intHolder.Print(); 答: Holder 或者 var(9) 要求程序运行结果为using System;namespace Page_6396161 class Program static void Main() string s1 = 25.0; string s2 = 36.0; double
55、 d1 = double.Parse(s1); double d2 = double.Parse(s2); double total = d1 d2; Console.WriteLine(0, total); 答:+六编程题(6)(1)从键盘上输入若干个实数,按从大到小的顺序输出。要求逐个输入要排序的实数,当从键盘上直接按Enter输入空内容时,就对先前输入的实数排序后输出。using System;using System.Collections.Generic;class Program static void Main(string args) List x = new List();
56、bool 继续 = true; int i =1; do double d; 继续 = InputReal(i+, out d); if (继续 = true) x.Add(d); while (继续 = true); doublea = x.ToArray(); Sort(a); Output(a); static bool InputReal(int No,out double x) x =0.0; string s; Console.Write(请输入第0个数:,No); s = Console.ReadLine(); if (s.Length = 0) return false; el
57、se x = double.Parse(s); return true; static void Sort(params double a) for (int i = 0; i a.Length; i+) for (int j = i+1; j a.Length; j+) if (ai aj) double t = ai; ai = aj; aj = t; static void Output(params double a) for (int i = 0; i 1000)。using System;class Program static void Main(string args) dou
58、ble item = Math.Sqrt(2.0); for (int i = 0; i = 1004; i+) item = Math.Sqrt(item+2.0); Console.WriteLine(数列的近似值为:0, item); (3)创建静态类CzSearch,在其中定义两个的泛型方法,实现查找数组元素的功能:一是SearchOne,找到数组中第一个匹配元素,二是SearchMore,找到数组中所有的匹配元素。using System;using System.Collections.Generic;class Program static void Main(string ar
59、gs) double a = 2.31, 65.23, 23.25, 32.65, 23.0, 23.0, 23.0, 23.0 ; int i = CzSearch.SearchOne(a, 23.0); Console.WriteLine(第一个匹配项=0, i); List m = CzSearch.SearchMore(a, 23.0); Console.Write(所有的匹配项=); foreach (int item in m) Console.Write( 0,item); static class CzSearch where T:IComparable public stat
60、ic int SearchOne(T a, T value) for (int i = 0; i a.Length; i+) if (ai.CompareTo( value) = 0) return i; return -1; public static List SearchMore(T a, T value) List result = new List(); for (int i = 0; i a.Length; i+) if (ai.CompareTo(value) = 0) result.Add(i); return result; (4)创建C#控制台应用程序,利用遍历器实现如下功
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025-2026学年古诗二首咏柳说课稿文库
- 2025-2026学年中国地理说课稿博客
- 2025-2026学年定语从句说课稿ppp
- 2025-2026学年导数函数说课稿
- 2025-2026学年大班折纸儿歌说课稿
- 华图内部申论课件
- 小学体育室内课56年级《篮球运动基础》知识
- 2026年进口化妆品行业商业模式创新报告
- 2026葡萄牙生物医药市场调研与科研合作报告
- 乡村振兴中博物馆短视频品牌塑造论文
- 三腔二囊管的护理查房
- ERCP手术应急预案(3篇)
- 质量安全总监培训手册课件
- 建筑工程项目文档及表格大全
- 大米包装设计分析
- 物业月度工作总结及下月计划
- 鹦鹉热的健康宣教
- 上海市幼儿园幼小衔接活动指导意见(修订稿)
- 2024-2025学年湖南省长沙市长郡教育集团七年级(上)月考数学试卷(10月份)(含答案)
- 作业消消乐打卡模板
- (高清版)DZT 0350-2020 矿产资源规划图示图例
评论
0/150
提交评论