C#复习习题.docx
- 文档编号:25106765
- 上传时间:2023-06-05
- 格式:DOCX
- 页数:13
- 大小:19.92KB
C#复习习题.docx
《C#复习习题.docx》由会员分享,可在线阅读,更多相关《C#复习习题.docx(13页珍藏版)》请在冰豆网上搜索。
C#复习习题
面向对象程序设计
1.描述new有两种用法
第一种:
newClass():
创建对象
第二种:
覆盖方法
publicnewXXXX(){}
2.类成员有()种可访问控制权限
可访问性:
public,protected,private,internal
3.用sealed修饰的类有什么特点
sealed修饰符用于防止从所修饰的类派生出其它类。
如果一个密封类被指定为其他类的基类,则会发生编译时错误。
密封类不能同时为抽象类。
4.如何理解委托?
答:
据说相当于函数指针,定义了委托就可以在不调用原方法名称的情况下调用那个方法.
#中的实现多继承的是什么
答:
接口
6.传入某个属性的set方法的隐含参数的名称是什么?
value,它的类型和属性所声名的类型相同。
7.委托声明的关键字是___delegate___
8.下面的代码中有什么错误吗?
_______
usingSystem;
classA
{
publicvirtualvoidF(){
("");
}
}
abstractclassB:
A
{
publicabstractoverridevoidF();
答:
abstractoverride是不可以一起修饰.
}错误处理机制是什么?
答:
错误处理机制采用try->catch->finally结构,发生错误时,层层上抛,直到找到匹配的Catch为止。
10.如何在C#中实现继承?
也就是继承的格式
在类名后加上一个冒号,再加上基类的名称。
11.描述一下C#中索引器的实现过程,是否只能根据数字进行索引?
答:
不是。
可以用任意类型
12.被protected修饰的属性/方法在何处可以访问?
在继承或间接继承与这个类的子类中可以访问。
13.私有成员会被继承么?
会,但是不能被访问。
所以看上去他们似乎是不能被继承的,但实际上确实被继承了。
14.请描述一下修饰符protectedinternal.
被protectedinternal修饰的属性/方法只能在它的在同一个程序集(Assembly)中的子类被访问。
#提供一个默认的无参数构造函数,当实现了另外一个有一个参数的构造函数时候,还想保留这个无参数的构造函数。
这样应该写几个构造函数?
两个,一旦你实现了一个构造函数,C#就不会再提供默认的构造函数了,所以需要手动实现那个无参数构造函数。
#中所有对象共同的基类是什么?
.
17.重载和覆写有什么区别?
重载提供了对一个方法签名的不同参数调用的实现。
覆写提供了子类中改变父类方法行为的实现。
18.在方法定义中,virtual有什么含意?
被virtual修饰的方法可以被子类覆写。
19.能够将非静态的方法覆写成静态方法么?
不能,覆写方法的签名必须与被覆写方法的签名保持一致,除了将virtual改为override.
19.可以覆写私有的虚方法么?
不可以,甚至子类中无法访问父类中的私有方法。
20.能够阻止某一个类被其他类继承么?
可以,使用关键字sealed.
21.能够实现允许某个类被继承,但不允许其中的某个方法被覆写么?
可以,标记这个类为public,并标记这个方法为sealed.
22.什么是抽象类(abstractclass)?
一种不可以被实例化的类。
抽象类中一般含有抽象方法,当然也可有具体实现。
继承类只有实现过所有抽象类的抽象方法后才能被实例化。
23.接口(interface)是什么?
只含有公有抽象方法(publicabstractmethod)的类。
这些方法必须在子类中被实现。
24.以下关于C#中方法重载的说法正确的是(CD)。
(选择二项)
A.如两个方法名字不同,而参数的数量不同,那么它们可以构成方法重载
B.如两个方法名字相同,而返回值的数据类型不同,那么它们可以构成方法重载
C.如两个方法名字相同,而参数的数据类型不同,那么它们可以构成方法重载
D.如两个方法名字相同,而参数的数量不同,那么它们可以构成方法重载
25.在C#语法中,在派生类中对基类的虚函数进行重写,要求在声明中使用(A)关键字。
(选择一项)
26.C#中关于委托,下面说法正确的是(ACD)。
(选择两项)
A.委托是一种类的成员
B.委托必须定义在类中
C.定义委托需要使用delegate关键字
D.委托是一种数据类型
27.下列关于C#的异常处理的说发法,错误的是(BC)。
(选择二项)
块必须跟catch块组合使用,不能单独使用
B.一个try块可以跟随多个catch块
C.使用throw语句既可引发系统异常,也可以引发由开发人员创建的自定义异常
D.在try…catch…..finally块中,即便开发人员编写强制逻辑代码,也不能跳出finally块的执行
28.在C#中,接口与抽象基类的区别在于(D)。
(选择一项)
A.抽象基类可以包含非抽象方法,而接口只能包含抽象方法
B.抽象基类可以被实例化,而接口不能被实例化
C.抽象基类不能被实例化,而接口可以被实例化
D.抽象类可以包括数据成员,接口只包括抽象函数、抽象属性和抽象索引等,没有数据。
29.在C#中,(C)访问修饰符修饰的变量只能由当前程序集访问。
分析程序输出结果可以有以下知识点出:
30.描述一下C#中索引器的实现过程,是否只能根据数字进行索引?
答:
不是。
可以用任意类型。
31.在下面的例子里
usingSystem;
classA
{
publicA()
{
PrintFields();
}
publicvirtualvoidPrintFields(){}
}
classB:
A
{
intx=1;
inty;
publicB()
{
PrintFields();
y=-1;
}
publicoverridevoidPrintFields()
{
("x={0},y={1}",x,y);
}
当使用newB()创建B的实例时,产生什么输出?
答:
x=1,y=0;x=1y=-1
32.接口是否可继承接口?
抽象类是否可实现(implements)接口?
抽象类是否可继承实体类(concreteclass)?
答:
接口可以继承接口。
抽象类可以实现(implements)接口,抽象类是否可继承实体类,但前提是实体类必须有明确的构造函数。
33.构造器Constructor是否可被override?
答:
构造器Constructor不能被继承,因此不能重写Overriding,但可以被重载Overloading。
34.是否可以继承String类?
答:
String类是final类故不可以继承。
35.数组有没有length()这个方法?
String有没有length()这个方法?
答:
数组没有length()这个方法,有length的属性。
String有length()这个方法。
36.谈谈finally的作用
答:
finally-再异常处理时提供finally块来执行任何清除操作。
如果抛出一个异常,那么相匹配的catch子句就会执行,然后控制就会进入finally块(如果有的话)。
37.成员变量和成员函数前加static的作用?
答:
它们被称为常成员变量和常成员函数,又称为类成员变量和类成员函数。
分别用来反映类的状态。
比如类成员变量可以用来统计类实例的数量,类成员函数负责这种统计的动作。
38.在c#中using和new这两个关键字有什么意义,请写出你所知道的意义?
using指令和语句new创建实例new隐藏基类中方法。
答:
using引入名称空间或者使用非托管资源
new新建实例或者隐藏父类方法
39.什么是虚函数?
什么是抽象函数?
答:
虚函数:
没有实现的,可由子类继承并重写的函数。
抽象函数:
规定其非虚子类必须实现的函数,必须被重写。
#中的三元运算符是?
答:
?
:
。
staticconstintA=1;这段代码有错误么?
是什么?
答:
const不能用static修饰。
42.C#中导入某一命名空间的关键字是(using)
43.C#程序的如口方法名是(main)
45.下列哪些不属于Path类的方法(记住path类的方法或者File类等)
46.Ref参数是引用调用,out参数是输入调用
47.定义常量的格式
48.C#中的所有数据类型都派生自(C)类。
A.String
B.Int64
C.Object
D.Int32
49.对于不返回任何值的方法,其返回类型为(D)。
A.char
B.float
C.int
D.void
50.如果ALPHA类继承自BETA类,则ALPHA类称为(A),BETA类称为()。
A.基类,派生类
B.密封类,基类
C.派生类,基类
D.该表述有误
51.在C#中,假设Person是一个类,而ITeller是一个接口,下面的(A)类声明是正确的。
A.classEmployee:
Person,ITeller
B.classEmployee:
ITeller,Person
C.classEmployee-Person,ITeller
D.classEmployee:
Person/ITeller
52.已经定义好一个类Person:
publicclassPerson
{
publicPerson(stirngname,uintage)
{
}
}
在Person的一个派生类Employee里调用Person类的构造函数正确方式为(B)。
A.(name,age);
B.base(name,age);
C.Person(name,age);
D.this(name,age);
53.(B)关键字用于定义事件。
A.delegate
B.event
C.this
D.Public
54.所有C#异常都派生自(D)类。
A.Windows
B.Exception
C.
D.
55.用来获取集合类中元素个数的属性是(B)
A.Length
B.Count
C.Capacity
D.Number
56.属性的(B)访问器用于将值赋给类的私有实例变量。
A.get
B.set
C.this
D.Value
57.在Person的一个派生类Employee里调用Person类的构造函数正确方式为(B)。
A.(name,age);
B.base(name,age);
C.Person(name,age);
D.this(name,age);
58.如果未显式赋值,则将整型值(A)赋给枚举中的第一个元素。
A.0
B.1
C.2
D.3
59.对文件进行操作和编程,一般需要引入(C)命名空间
A.
下列关于C#语法规则说法不正确的是(D)
A.字母区分大小写
B.同一行可以书写多条语句,但语句之间必须用分号分隔
C.在C++中支持抽象类而在C#中不支持抽象类。
2.C++中可在头文件中声明类的成员而在CPP文件中定义类的成员,在C#中没有头文件并且在同一处声明和定义类的成员。
3.在C#中可使用new修饰符显式隐藏从基类继承的成员。
4.在C#中要在派生类中重新定义基类的虚函数必须在前面加Override。
61.传入某个属性的set方法的隐含参数的名称是什么?
value,它的类型和属性所声名的类型相同。
62.如何在C#中实现继承?
在类名后加上一个冒号,再加上基类的名称。
63.C#支持多重继承么?
类之间不支持,接口之间支持。
类对接口叫做实现,不叫继承。
64.被protected修饰的属性/方法在何处可以访问?
在继承或间接继承与这个类的子类中可以访问。
65.私有成员会被继承么?
会,但是不能被访问。
所以看上去他们似乎是不能被继承的,但实际上确实被继承了。
66.请描述一下修饰符protectedinternal。
在同一个Assembly中,他的访问级别和public一样,而跨Assembly访问时,他的访问级别同protected一样。
即protected的范围+internal的范围。
67.C#提供一个默认的无参数构造函数,当我实现了另外一个有一个参数的构造函数时候,还想保留这个无参数的构造函数。
这样我应该写几个构造函数?
两个,一旦你实现了一个构造函数,C#就不会再提供默认的构造函数了,所以需要手动实现那个无参数构造函数。
68.C#中所有对象共同的基类是什么?
69.重载和覆写有什么区别?
重载提供了对一个方法签名的不同参数调用的实现。
覆写提供了子类中改变父类方法行为的实现。
70.在方法定义中,virtual有什么含意?
被virtual修饰的方法可以被子类覆写。
71.能够将非静态的方法覆写成静态方法么?
不能,覆写方法的签名必须与被覆写方法的签名保持一致,除了将virtual改为override。
72.可以覆写私有的虚方法么?
不可以,甚至子类中无法访问父类中的私有方法。
73.能够阻止某一个类被其他类继承么?
可以,使用关键字sealed。
74.能够实现允许某个类被继承,但不允许其中的某个方法被覆写么?
可以,标记这个类为public,并标记这个方法为sealed。
75.什么是抽象类(abstractclass)?
一种不可以被实例化的类。
抽象类中一般含有抽象方法,当然也可有具体实现。
继承类只有实现过所有抽象类的抽象方法后才能被实例化。
76.何时必须声明一个类为抽象类?
当这个类中包含抽象方法时,或是该类并没有完全实现父类的抽象方法时。
77.接口(interface)是什么?
只含有共有抽象方法(publicabstractmethod)的类。
这些方法必须在子类中被实现。
78.为什么不能指定接口中方法的修饰符?
接口中的方法用来定义对象之间通信的契约,指定接口中的方法为私有或保护没有意义。
他们默认为公有方法。
79.可以继承多个接口么?
当然。
80.那么如果这些接口中有重复的方法名称呢?
这种情况中你可以决定如何实现。
当然需要特别得小心。
但是在编译环节是没有问题的。
81.接口和抽象类的区别是什么?
接口中所有方法必须是抽象的,并且不能指定方法的访问修饰符。
抽象类中可以有方法的实现,也可以指定方法的访问修饰符。
82.如何区别重载方法?
不同的参数类型,不同的参数个数,不同的参数顺序。
83.const和readonly有什么区别?
const可以用于局部常量,而readonly,实际是类的initonly字段,显然不能是局部的。
84.和有什么区别?
是不可变的字符串。
存放了一个可变的字符串,并提供一些对这个字符串修改的方法
85.用sealed修饰的类有什么特点:
sealed修饰符用于防止从所修饰的类派生出其它类。
如果一个密封类被指定为其他类的基类,则会发生编译时错误。
密封类不能同时为抽象类。
sealed修饰符主要用于防止非有意的派生,但是它还能促使某些运行时优化。
具体说来,由于密封类永
远不会有任何派生类,所以对密封类的实例的虚拟函数成员的调用可以转换为非虚拟调用来处理。
86.虚函数的用法:
答:
1)virtual指明一成员函数为虚函数,而virtual仅用于类的定义里,在类外可不加此关键字.
2)一个类的成员函数被定义为虚函数时,子类该函数仍保持虚函数特征.
3)子类覆盖此函数时,定义里可不加virtual关键字,但函数声明要和基类的完全一致!
且此声明是必须的.
4)不是纯虚函数时,父类的虚函数必须要实现;而若将父类的虚函数设定为纯虚函数时,子类必需要覆盖之而且必须要实现之!
87.解释virtual、sealed、override和abstract的区别
virtual申明虚方法的关键字,说明该方法可以被重写
sealed说明该类不可被继承
override重写基类的方法
abstract申明抽象类和抽象方法的关键字,抽象方法不提供实现,由子类实现,抽象类不可实例化。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C# 复习 习题