1、C#复习习题面向对象程序设计 1。描述new有两种用法第一种:new Class():创建对象第二种:覆盖方法public new XXXX()2.类成员有( )种可访问控制权限可访问性:public ,protected ,private,internal3.用sealed修饰的类有什么特点sealed 修饰符用于防止从所修饰的类派生出其它类。如果一个密封类被指定为其他类的基类,则会发生编译时错误。密封类不能同时为抽象类。4.如何理解委托?答:据说相当于函数指针,定义了委托就可以在不调用原方法名称的情况下调用那个方法。5.C#中的实现多继承的是什么答:接口6.传入某个属性的set方法的隐含参
2、数的名称是什么?value,它的类型和属性所声名的类型相同。7.委托声明的关键字是_ delegate _8。下面的代码中有什么错误吗?_using System;class Apublic virtual void F()Console.WriteLine(A.F);abstract class B:Apublic abstract override void F(); 答:abstract override 是不可以一起修饰. / new public abstract void F(); 9。net的错误处理机制是什么?答:.net错误处理机制采用try-catch-finally结构,
3、发生错误时,层层上抛,直到找到匹配的Catch为止。10。如何在C#中实现继承?也就是继承的格式在类名后加上一个冒号,再加上基类的名称。11。描述一下C中索引器的实现过程,是否只能根据数字进行索引? 答:不是。可以用任意类型12。被protected修饰的属性/方法在何处可以访问?在继承或间接继承与这个类的子类中可以访问。13。私有成员会被继承么?会,但是不能被访问.所以看上去他们似乎是不能被继承的,但实际上确实被继承了。14.请描述一下修饰符protected internal。被protected internal修饰的属性/方法只能在它的在同一个程序集(Assembly)中的子类被访问。
4、15。C#提供一个默认的无参数构造函数,当实现了另外一个有一个参数的构造函数时候,还想保留这个无参数的构造函数.这样应该写几个构造函数?两个,一旦你实现了一个构造函数,C就不会再提供默认的构造函数了,所以需要手动实现那个无参数构造函数。16。C中所有对象共同的基类是什么?System。Object.17.重载和覆写有什么区别?重载提供了对一个方法签名的不同参数调用的实现。覆写提供了子类中改变父类方法行为的实现.18.在方法定义中,virtual有什么含意?被virtual修饰的方法可以被子类覆写。19.能够将非静态的方法覆写成静态方法么?不能,覆写方法的签名必须与被覆写方法的签名保持一致,除了
5、将virtual改为override.19.可以覆写私有的虚方法么?不可以,甚至子类中无法访问父类中的私有方法。20。能够阻止某一个类被其他类继承么?可以,使用关键字sealed.21.能够实现允许某个类被继承,但不允许其中的某个方法被覆写么?可以,标记这个类为public,并标记这个方法为sealed.22.什么是抽象类(abstract class)?一种不可以被实例化的类。抽象类中一般含有抽象方法,当然也可有具体实现。继承类只有实现过所有抽象类的抽象方法后才能被实例化。23。接口(interface)是什么?只含有公有抽象方法(public abstract method)的类。这些方法
6、必须在子类中被实现。24。 以下关于C中方法重载的说法正确的是(CD)。(选择二项)A.如两个方法名字不同,而参数的数量不同,那么它们可以构成方法重载B.如两个方法名字相同,而返回值的数据类型不同,那么它们可以构成方法重载C.如两个方法名字相同,而参数的数据类型不同,那么它们可以构成方法重载D.如两个方法名字相同,而参数的数量不同,那么它们可以构成方法重载25。 在C语法中,在派生类中对基类的虚函数进行重写,要求在声明中使用(A)关键字.(选择一项)A.overrideB.newC。staticD.virtual26. C#中关于委托,下面说法正确的是(ACD)。(选择两项)A。委托是一种类的
7、成员B。委托必须定义在类中 C.定义委托需要使用delegate关键字D.委托是一种数据类型27.下列关于C的异常处理的说发法,错误的是(BC)。(选择二项)A。Try块必须跟catch块组合使用,不能单独使用B。一个try块可以跟随多个catch块C.使用throw语句既可引发系统异常,也可以引发由开发人员创建的自定义异常D.在try catch .。finally块中,即便开发人员编写强制逻辑代码,也不能跳出finally块的执行28。 在C中,接口与抽象基类的区别在于(D).(选择一项)A.抽象基类可以包含非抽象方法,而接口只能包含抽象方法B。抽象基类可以被实例化,而接口不能被实例化C。
8、抽象基类不能被实例化,而接口可以被实例化D.抽象类可以包括数据成员,接口只包括抽象函数、抽象属性和抽象索引等,没有数据.29。 在C中,(C)访问修饰符修饰的变量只能由当前程序集访问。A.publicB.protectedC。internalD。private分析程序输出结果可以有以下知识点出:30.描述一下C中索引器的实现过程,是否只能根据数字进行索引?答:不是。可以用任意类型。31。在下面的例子里using System;class Apublic A()PrintFields();public virtual void PrintFields()class B:Aint x=1;int
9、y;public B()PrintFields();y=1;public override void PrintFields()Console。WriteLine(x=0,y=1”,x,y);当使用new B()创建B的实例时,产生什么输出?答:x=1,y=0;x= 1 y = -132。接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承实体类(concrete class)?答:接口可以继承接口。抽象类可以实现(implements)接口,抽象类是否可继承实体类,但前提是实体类必须有明确的构造函数。33.构造器Constructor是否可被override
10、?答:构造器Constructor不能被继承,因此不能重写Overriding,但可以被重载Overloading.34。是否可以继承String类?答:String类是final类故不可以继承。35。数组有没有length()这个方法? String有没有length()这个方法?答:数组没有length()这个方法,有length的属性。String有length()这个方法。36。谈谈finally的作用答:finally再异常处理时提供 finally 块来执行任何清除操作。如果抛出一个异常,那么相匹配的 catch 子句就会 执行,然后控制就会进入 finally 块(如果有的话)。
11、37.成员变量和成员函数前加static的作用?答:它们被称为常成员变量和常成员函数,又称为类成员变量和类成员函数。分别用来反映类的状态。比如类成员变量可以用来统计类实例的数量,类成员函数负责这种统计的动作。38。在c中using和new这两个关键字有什么意义,请写出你所知道的意义?using 指令 和语句 new 创建实例 new 隐藏基类中方法。答:using 引入名称空间或者使用非托管资源new 新建实例或者隐藏父类方法39什么是虚函数?什么是抽象函数?答:虚函数:没有实现的,可由子类继承并重写的函数。抽象函数:规定其非虚子类必须实现的函数,必须被重写。40.c#中的三元运算符是?答:?
12、:。41.public static const int A=1;这段代码有错误么?是什么?答:const不能用static修饰。42. C#中导入某一命名空间的关键字是(using)43. C#程序的如口方法名是(main)45下列哪些不属于Path类的方法(记住path类的方法或者File类等)46Ref参数是引用调用,out参数是输入调用47. 定义常量的格式48。 C 中的所有数据类型都派生自(C)类。AStringBInt64CObjectDInt3249对于不返回任何值的方法,其返回类型为(D).AcharBfloatCintDvoid50如果 ALPHA 类继承自 BETA 类,
13、则 ALPHA 类称为(A ),BETA 类称为( )。A基类,派生类B密封类,基类C派生类,基类D该表述有误51.在 C# 中,假设 Person 是一个类,而ITeller 是一个接口,下面的(A)类声明是正确的。Aclass Employee : Person,ITellerBclass Employee : ITeller,PersonCclass Employee Person,ITellerDclass Employee : Person / ITeller52已经定义好一个类Person:public class Personpublic Person( stirng name,
14、 uint age)在Person的一个派生类Employee里调用Person类的构造函数正确方式为(B).Abase。Person (name, age);Bbase (name, age);CPerson (name, age);Dthis (name, age);53。(B)关键字用于定义事件.AdelegateBeventCthisDPublic54所有 C 异常都派生自(D)类。AWindowsBExceptionCCommon.ExceptionDSystem.Exception55用来获取集合类中元素个数的属性是(B)A. LengthB. CountC。 CapacityD.
15、 Number56属性的(B)访问器用于将值赋给类的私有实例变量。AgetBsetCthisDValue57在Person的一个派生类Employee里调用Person类的构造函数正确方式为(B)。Abase.Person (name, age);Bbase (name, age);CPerson (name, age);Dthis (name, age);58如果未显式赋值,则将整型值(A)赋给枚举中的第一个元素。A0B1C2D359对文件进行操作和编程,一般需要引入(C)命名空间ASystem.Data B。System。collections C。System。IO D。System.N
16、ET60下列关于C语法规则说法不正确的是(D)A字母区分大小写B同一行可以书写多条语句,但语句之间必须用分号分隔C/ 用于注释语句,被注释的语句不会被编译D值类型变量在使用之前必须先声明,一旦声明后,就具有初始值61以下描述错误的是(3)1. 在C+中支持抽象类而在C#中不支持抽象类。2. C+中可在头文件中声明类的成员而在CPP文件中定义类的成员,在C#中没有头文件并且在同一处声明和定义类的成员。3. 在C中可使用 new 修饰符显式隐藏从基类继承的成员。4。 在C#中要在派生类中重新定义基类的虚函数必须在前面加Override。61。 传入某个属性的set方法的隐含参数的名称是什么? va
17、lue,它的类型和属性所声名的类型相同.62。如何在C#中实现继承? 在类名后加上一个冒号,再加上基类的名称。63C支持多重继承么? 类之间不支持,接口之间支持。类对接口叫做实现,不叫继承。64. 被protected修饰的属性/方法在何处可以访问? 在继承或间接继承与这个类的子类中可以访问.65私有成员会被继承么? 会,但是不能被访问。所以看上去他们似乎是不能被继承的,但实际上确实被继承了.66. 请描述一下修饰符protected internal。在同一个Assembly中,他的访问级别和public一样,而跨Assembly访问时,他的访问级别同protected一样。即protect
18、ed的范围 + internal的范围。67. C提供一个默认的无参数构造函数,当我实现了另外一个有一个参数的构造函数时候,还想保留这个无参数的构造函数。这样我应该写几个构造函数?两个,一旦你实现了一个构造函数,C就不会再提供默认的构造函数了,所以需要手动实现那个无参数构造函数。68C中所有对象共同的基类是什么?System.Object69。 重载和覆写有什么区别?重载提供了对一个方法签名的不同参数调用的实现。覆写提供了子类中改变父类方法行为的实现。70. 在方法定义中,virtual有什么含意?被virtual修饰的方法可以被子类覆写。71。 能够将非静态的方法覆写成静态方法么?不能,覆写
19、方法的签名必须与被覆写方法的签名保持一致,除了将virtual改为override。72。 可以覆写私有的虚方法么?不可以,甚至子类中无法访问父类中的私有方法。73。 能够阻止某一个类被其他类继承么?可以,使用关键字sealed。74。 能够实现允许某个类被继承,但不允许其中的某个方法被覆写么?可以,标记这个类为public,并标记这个方法为sealed。75. 什么是抽象类(abstract class)?一种不可以被实例化的类。抽象类中一般含有抽象方法,当然也可有具体实现。继承类只有实现过所有抽象类的抽象方法后才能被实例化。76。 何时必须声明一个类为抽象类?当这个类中包含抽象方法时,或是
20、该类并没有完全实现父类的抽象方法时。77. 接口(interface)是什么?只含有共有抽象方法(public abstract method)的类。这些方法必须在子类中被实现。78. 为什么不能指定接口中方法的修饰符?接口中的方法用来定义对象之间通信的契约,指定接口中的方法为私有或保护没有意义。他们默认为公有方法。79. 可以继承多个接口么?当然。80. 那么如果这些接口中有重复的方法名称呢?这种情况中你可以决定如何实现。当然需要特别得小心。但是在编译环节是没有问题的.81. 接口和抽象类的区别是什么? 接口中所有方法必须是抽象的,并且不能指定方法的访问修饰符。抽象类中可以有方法的实现,也可
21、以指定方法的访问修饰符。82。 如何区别重载方法?不同的参数类型,不同的参数个数,不同的参数顺序。83。 const和readonly有什么区别? const可以用于局部常量,而readonly,实际是类的initonly字段,显然不能是局部的.84. System.String 和System。StringBuilder有什么区别?System。String是不可变的字符串。System。StringBuilder存放了一个可变的字符串,并提供一些对这个字符串修改的方法85用sealed修饰的类有什么特点:sealed 修饰符用于防止从所修饰的类派生出其它类.如果一个密封类被指定为其他类的基
22、类,则会发生编译时错误。密封类不能同时为抽象类。sealed 修饰符主要用于防止非有意的派生,但是它还能促使某些运行时优化。具体说来,由于密封类永远不会有任何派生类,所以对密封类的实例的虚拟函数成员的调用可以转换为非虚拟调用来处理。86虚函数的用法:答:1)virtual指明一成员函数为虚函数,而virtual仅用于类的定义里,在类外可不加此关键字。 2)一个类的成员函数被定义为虚函数时,子类该函数仍保持虚函数特征。 3)子类覆盖此函数时,定义里可不加virtual关键字,但函数声明要和基类的完全一致!且此声明是必须的。 4)不是纯虚函数时,父类的虚函数必须要实现; 而若将父类的虚函数设定为纯虚函数时,子类必需要覆盖之而且必须要实现之! 87解释virtual、sealed、override和abstract的区别virtual申明虚方法的关键字,说明该方法可以被重写sealed说明该类不可被继承override重写基类的方法abstract申明抽象类和抽象方法的关键字,抽象方法不提供实现,由子类实现,抽象类不可实例化。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1