C#OOP自测C#自测.docx

上传人:b****7 文档编号:25524088 上传时间:2023-06-09 格式:DOCX 页数:13 大小:46.91KB
下载 相关 举报
C#OOP自测C#自测.docx_第1页
第1页 / 共13页
C#OOP自测C#自测.docx_第2页
第2页 / 共13页
C#OOP自测C#自测.docx_第3页
第3页 / 共13页
C#OOP自测C#自测.docx_第4页
第4页 / 共13页
C#OOP自测C#自测.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

C#OOP自测C#自测.docx

《C#OOP自测C#自测.docx》由会员分享,可在线阅读,更多相关《C#OOP自测C#自测.docx(13页珍藏版)》请在冰豆网上搜索。

C#OOP自测C#自测.docx

C#OOP自测C#自测

C#OOP(自测)

一、填空题

1、实例成员通过类的实例访问,静态成员通过类访问

2、用sealed修饰的类叫密封类,用于防止从所修饰的类派生出其它类。

如果一个密封类被指定为其他类的基类,则会发生编译时错误。

密封类不能同时为抽象类。

3、C#中,stringstr=null与stringstr="",请尽量用文字说明区别,前者只声明变量不分配内存;后者指向一个值为空字符串的实例,分配内存空间

4、详述.NET里class和struct的异同。

类与结构有很多相似之处:

结构可以实现接口,并且可以具有与类相同的成员类型。

然而,结构在几个重要方面不同于类:

结构为值类型而不是引用类型,并且结构不支持继承。

5、值类型和引用类型的区别:

值类型变量间赋值是值拷贝,引用类型变量间赋值是地址拷贝

6、如何把一个array复制到arrayList里:

将array传给arraylist的构造函数

7、Override是对基类中成员的重写,实现多态。

8、面向对象的语言具有封装性、继承性、多态性

9、Strings=newString("xyz");创建了两个StringObject,分别是一个是“xyx”,一个是指向“xyx”的引用对象s。

10、是否可以继承String类(写明原因):

String类是sealed类故不可以继承。

11、using的用法:

引入名称空间,自动释放对象。

12、如果x大于y,则输出x,否则输出y,用三元运算符表示:

x>y?

x:

y

13、publicstaticconstintA=1;这段代码有错误么?

是什么?

const不能用static修饰。

14、在.Net中所有可序列化的类都被标记为_[serializable],包括它的父类和属性中的引用类型。

15、.net的错误处理机制是什么:

.net错误处理机制采用try->catch->finally结构,发生错误时,层层上抛,直到找到匹配的Catch为止

16、&和&&的区别:

&是位运算符,表示按位与运算,&&是逻辑运算符,表示逻辑与(and)

17、类是具有共同特征和行为的一类事物的统称,以及对这一类事物的一种抽象定义

18、对象是独一无二的具体个体,用来描述现实世界的某个事物,将现实世界的事物模型化

20、实例化的对象可以通过对象.字段的方式来修改或访问该对象的字段值

21、属性是对字段的封装,主要目的是为了保障对字段访问的安全性和灵活性

22、在创建对象时对对象成员赋初值会调用构造函数。

23、创建对象时,根据不同的需要,在不同的场合对不同成员初始化,需要使用重载构造函数。

24、构成方法重载的条件有:

同一个类中、方法名相同、参数的类型或个数不同。

25、C#中集合的主要特性有:

动态改变大小、可存储任意类型的对象、提供一系列操作集合中对象的方法。

26、ArrayList和Hashtable中存储的元素都会自动转换成object类型,在访问时需要从object转换回存储前的类型。

27、使用泛型的优点有:

可以极大限度重用代码、保护类型的安全及提高程序的性能。

28、继承的特性有:

继承的传递性、继承的单根性、成员的访问性。

29、C#中使用:

符号实现继承。

30、当A类被B类继承时,我们就把A类称为父类或基类,B类稀烂为子类或派生类。

31、密封类是指防止派生子类,密封方法是指不允许子类再次被重写。

32、继承的好处在于子类自动拥有了父可可被继承的字段、属性和方法等,只需再定义自己独特的成员即可。

33、在创建子类对象时,先隐式调用父类的无参构造函数,再调用自身的构造函数。

如果父类没有无参构造函数则提示错误。

34、在继承关系中,子类和父类满足“子类isa父类”的关系。

36、在C#中,如果定义了一个没有父类的类,则会自动继承Object类。

37、多态的主要表现形式是:

子类继承父类后对于同一个方法有不同的实现方式。

其实现的方式分别是:

隐藏父类方法和重写父类方法。

38、sealed修饰方法时只能与override一起使用,防止重写的方法再次被重写。

39、抽象类可以不包含抽象方法,但有抽象方法的类必须定义为抽象类。

40、.NET框架提供了Directory类和DirectoryInfo类用于对磁盘和文件夹的操作管理,提供了File类和FileInfo类用于对文件进行常用操作管理。

41、序列化就是将对象实例的状态存储到存储媒体中的过程。

二、简答题

1.简述private、protected、public、internal修饰符的访问权限。

访问修饰符

说明

public

公有的,访问不受限制

private

私有的,只能本类内部访问

protected

受保护的,只能本类及其子类访问

internal

内部的,只限于本项目内成员访问

protectedinternal

内部保护的,只限于本项目或子类访问

2.abstractclass和interface有什么区别?

答:

抽象类可以有具体实现的成员,而接口没有;接口可以多重继承而抽象类不可以;抽象类的子类使用override关键字对父类成员进行重写,而接口的派生类直接实现接口成员。

3.

简述构造函数与普通方法的不同点:

 

4、使用抽象类要注意以下要点(简答):

并自己构造代码进行说明

1.抽象类可以不包含抽象方法,但是含有抽象方法的类必须定义为抽象类

2.抽象方法不允许有方法体

3.子类继承于抽象类时必须重写抽象类中所有的抽象方法,除非子类也是抽象类

4.抽象类不允许直接实例化,只能实例化其非抽象子类对象

5、抽象方法和虚方法的区别

抽象方法和虚方法都是为了实现多态功能,其主要区别在于:

抽象方法只提供一个功能名称,要求子类必须实现该功能;而虚方法不只提供功能名称还提供了默认实现方式,子类可以不重新实现该功能,其语法区别如表如示:

抽象方法

虚方法

使用abstract关键字修饰

使用virtual关键字修饰

只能定义在抽象类中

可以定义在除密封类以外的类中

不允许有方法体

必须有方法体

子类必须重写

子类可以重写

7、自定义接口时需要注意:

并自己构造代码进行说明

1、接口名通常使用大写字母“I”开头,表明其是接口类型

2、接口可包含方法、属性、事件和索引器,但不能包含字段

3、接口中定义的成员不允许有具体实现

4、接口中的成员不允许添加任何访问修饰符

8、抽象类和接口的异同点

C#中抽象类和接口在使用上有很多相同点:

例如,都不实例化,都可以包含未实现的方法,其子类必须实现其未实现的方法等级,但是在定义时有很大的区别,如下表如示:

1.抽象类和接口语法的区别

抽象类

接口

使用abstract关键字

使用interface关键字

可以包含字段和已实现成员

不能有字段,只能包含未实现的成员

子类通过override实现抽象方法

子类直接实现所有成员

2.应用场合的区别

抽象类是一种特殊的类,不能被实例化,除此之外可以像普通类一样使用,其使用场合侧重于有继承关系的一组对象。

而接口用于定义一组行为规则,一般用于多个不同种类对象具有相同行为或功能的场合。

9、ArrayList有3种方式来删除其中元素

(1)Remove(objectvalue):

从ArrayList集合中移除与指定的value对象匹配的第一个元素。

(2)RemoveAt(intindex):

从ArrayList集合中移除指定索引处的元素。

(3)Clear():

移除ArrayList中所有元素。

10、读写文件操作的基本步骤为:

(1)创建文件流。

(2)创建读、写器。

(3)执行读、写操作。

(4)关闭读写器。

(5)关闭文件流。

三、理解题

1、在下面的例子里

usingSystem;

classA

{

publicA(){

PrintFields();

}

publicvirtualvoidPrintFields(){}

}

classB:

A

{

intx=1;

inty;

publicB(){

y=-1;

publicoverridevoidPrintFields(){

Console.WriteLine("x={0},y={1}",x,y);

}

}

当使用newB()创建B的实例时,产生什么输出?

X=1,Y=0

2、

usingSystem;

classA

{

publicstaticintX;

staticA(){

X=B.Y+1;

}

}

classB

{

publicstaticintY=A.X+1;

staticB(){}

staticvoidMain(){

Console.WriteLine("X={0},Y={1}",A.X,B.Y);

}

}

产生的输出结果是什么?

x=1,y=2

4.执行下面代码后:

StringstrTemp="abcdefg某某某";

IntiSystem.Text.Encoding.Default.GetBytes(strTemp).Length;

Intj=strTemp.Length;

问:

i=(14);j=(11)

i=(14);j=(11)中文两个字节

5.override与重载的区别

答:

override与重载的区别。

重载是方法的名称相同,参数个数或参数类型不同,进行多次重载以适应不同的需要

6.请编程实现一个冒泡排序算法?

答:

int[]array=newint[*];

inttemp=0;

for(inti=0;i

{

for(intj=array.Length-1;j>=i;j--)

{

if(array[j+1]

{

temp=array[j+1];

array[j+1]=array[j];

array[j]=temp;

}

}

}

7.一列数的规则如下:

1、1、2、3、5、8、13、21、34......求第30位数是多少,用递归算法实现。

答:

publicclassMainClass

{

publicstaticvoidMain()

{

Console.WriteLine(Foo(30));

}

publicstaticintFoo(inti)

{

if(i==1||i==2)

return1;

returnFoo(i-1)+Foo(i-2);

}

}

8.在下面的例子里

usingSystem;

classA

{

publicA()

{

PrintFields();

}

publicvirtualvoidPrintFields(){}

}

classB:

A

{

intx=1;

inty;

publicB()

{

y=-1;

}

publicoverridevoidPrintFields()

{

Console.WriteLine("x={0},y={1}",x,y);

}

}

当使用newB()创建B的实例时,产生什么输出?

答:

X=1,Y=0;x=1y=-1

9.能用foreach遍历访问的对象需要实现________________接口或声明________________方法的类型。

答:

IEnumerable、GetEnumerator。

10.接口是否可继承接口?

抽象类是否可实现(implements)接口?

抽象类是否可继承实体类(concreteclass)?

答:

接口可以继承接口。

抽象类可以实现(implements)接口,抽象类可继承实体类,但前提是实体类必须有明确的构造函数。

11.构造器Constructor是否可被override?

答:

构造器Constructor不能被继承,因此不能重写Override,但可以被重载。

12.try{}里有一个return语句,那么紧跟在这个try后的finally{}里的code会不会被执行,什么时候被执行,在return前还是后?

答:

会执行,在return前执行。

13.swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上?

答:

都可以。

14.产生一个int数组,长度为100,并向其中随机插入1-100,并且不能重复。

int[]intArr=newint[100];

ArrayListmyList=newArrayList();

Randomrnd=newRandom();

while(myList.Count<100)

{

intnum=rnd.Next(1,101);

if(!

myList.Contains(num))

myList.Add(num);

}

for(inti=0;i<100;i++)

intArr[i]=(int)myList[i];

15.需要实现对一个字符串的处理,首先将该字符串首尾的空格去掉,如果字符串中间还有连续空格的话,仅保留一个空格,即允许字符串中间有多个空格,但连续的空格数不可超过一个.

答:

stringinputStr="xxxx";

inputStr=Regex.Replace(inputStr.Trim(),"[]*","");

16.下面这段代码输出什么?

为什么?

inti=5;

intj=5;

if(Object.ReferenceEquals(i,j))

Console.WriteLine("Equal";

else

Console.WriteLine("NotEqual";

答:

不相等,因为比较的是对象

17.什么是虚函数?

什么是抽象函数?

答:

虚函数:

有实现,可以被子类重写;抽象函数:

无实现,必须被非抽象子类重写。

60.类成员有_____种可访问形式?

答:

2;

62.floatf=-123.567F;inti=(int)f;i的值现在是_____?

答:

-123。

67.下面的代码中有什么错误吗?

_______

usingSystem;

classA

{

publicvirtualvoidF(){

Console.WriteLine("A.F";

}

}

abstractclassB:

A

{

publicabstractoverridevoidF();答:

abstractoverride是不可以一起修饰.

}//newpublicabstractvoidF();

68.当类T只声明了私有实例构造函数时,则在T的程序文本外部,___可以___(可以or不可以)从T派生出新的类,不可以____(可以or不可以)直接创建T的任何实例。

答:

不可以,不可以。

73.在.net(C#or)中,Appplication.Exit还是Form.Close有什么不同?

答:

一个是退出整个应用程序,一个是关闭其中一个form。

74.在C#中有一个double型的变量,比如10321.5,比如122235401.21644,作为货币的值如何按各个不同国家的习惯来输出。

比如美国用$10,321.50和$122,235,401.22而在英国则为£10321.50和£122235401.22

答:

System.Globalization.CultureInfoMyCulture=newSystem.Globalization.CultureInfo("en-US");

//System.Globalization.CultureInfoMyCulture=newSystem.Globalization.CultureInfo("en-GB");为英国货币类型

decimaly=9999999999999999999999999999m;

stringstr=String.Format(MyCulture,"Myamount={0:

c}",y);

78.重载与覆盖的区别?

答:

1、方法的覆盖是子类和父类之间的关系,是垂直关系;方法的重载是同一个类中方法之间的关系,是水平关系

2、覆盖只能由一个方法,或只能由一对方法产生关系;方法的重载是多个方法之间的关系。

3、覆盖要求参数列表相同;重载要求参数列表不同。

4、覆盖关系中,调用那个方法体,是根据对象的类型(对象对应存储空间类型)来决定;重载关系,是根据调用时的实参表与形参表来选择方法体的。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1