c#面试题非常详细.docx

上传人:b****6 文档编号:7584062 上传时间:2023-01-25 格式:DOCX 页数:15 大小:25.70KB
下载 相关 举报
c#面试题非常详细.docx_第1页
第1页 / 共15页
c#面试题非常详细.docx_第2页
第2页 / 共15页
c#面试题非常详细.docx_第3页
第3页 / 共15页
c#面试题非常详细.docx_第4页
第4页 / 共15页
c#面试题非常详细.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

c#面试题非常详细.docx

《c#面试题非常详细.docx》由会员分享,可在线阅读,更多相关《c#面试题非常详细.docx(15页珍藏版)》请在冰豆网上搜索。

c#面试题非常详细.docx

c#面试题非常详细

内容正文:

1、在C#中,stringstr=null与stringstr=“”请尽量使用文字或图象说明其中的区别。

回答要点:

说明详细的空间分配。

(10分)

答:

stringstr=null是不给他分配内存空间,而stringstr=“”给它分配长度为空字符串的内存空间.

2、请详述在dotnet中类(class)与结构(struct)的异同:

(10分)

答:

Class可以被实例化,属于引用类型,是分配在内存的堆上的,Struct属于值类型,是分配在内存的栈上的.

3、根据委托(delegate)的知识,请完成以下用户控件中代码片段的填写:

(10)

namespacetest

{

publicdelegatevoidOnDBOperate();

publicclassUserControlBase:

{

publiceventOnDBOperateOnNew;

privatevoidtoolBar_ButtonClick(objectsender,e)

{

if

{

}catch(ExceptionEx)

{

());

}finally

{

if(!

();

}

请问

1}以上代码可以正确使用连接池吗?

答:

回答:

如果传入的connectionString是一模一样的话,可以正确使用连接池。

不过一模一样的意思是,连字符的空格数,顺序完全一致。

2}以上代码所使用的异常处理方法,是否所有在test方法内的异常都可以被捕捉并显示出来?

答:

只可以捕捉数据库连接中的异常吧.(finally中,catch中,如果有别的可能引发异常的操作,也应该用try,catch。

所以理论上并非所有异常都会被捕捉。

8、简要谈一下您对微软.NET构架下remoting和webservice两项技术的理解以及实际中的应用。

(10)

答:

WS主要是可利用HTTP,穿透防火墙。

而Remoting可以利用TCP/IP,二进制传送提高效率。

9、公司要求开发一个继承类的组件,要求达到以下的特殊功能:

点击ListView各列列头时,能按照点击列的每行值进行重排视图中的所有行(排序的方式如DataGrid相似)。

根据您的知识,请简要谈一下您的思路:

(10)

答:

根据点击的列头,把该列的ID取出,按照该ID排序后,在给绑定到ListView中

10、给定以下XML文件,完成算法流程图。

(10)

请画出遍历所有文件名(FileName)的流程图(请使用递归算法)。

答:

voidFindFile(Directoryd)

{

FileOrFolders=();

foreach(FileOrFolderfofinFileOrFolders)

{

if(fofisFile)

YouFoundafile;

elseif(fofisDirectory)

FindFile(fof);

}

}

简单的说就是从根节点开始遍历找子节点,在从找到的子节点找它的子节点,一层层下去

如果你的简历上面写“熟悉/了解C#”,那么你就应该能够回答下面的这些基础问题。

我将给出自己的简要答案以供参考。

欢迎讨论。

传入某个属性的set方法的隐含参数的名称是什么?

value,它的类型和属性与所声明的类型相同。

如何在C#中实现继承?

在类名后加上一个冒号,再加上基类的名称。

C#支持多重继承么?

不支持。

可以用接口来实现。

被protected修饰的属性/方法在何处可以访问?

在继承或间接继承与这个类的子类中可以访问。

私有成员会被继承么?

会,但是不能被访问。

所以看上去他们似乎是不能被继承的,但实际上确实被继承了。

请描述一下修饰符protectedinternal。

被protectedinternal修饰的属性/方法只能在它的在同一个程序集(Assembly)中的子类被访问。

C#提供一个默认的无参数构造函数,当我实现了另外一个有一个参数的构造函数时候,还想保留这个无参数的构造函数。

这样我应该写几个构造函数?

两个,一旦你实现了一个构造函数,C#就不会再提供默认的构造函数了,所以需要手动实现那个无参数构造函数。

C#中所有对象共同的基类是什么?

.

重载和覆写有什么区别?

重载提供了对一个方法签名的不同参数调用的实现。

覆写提供了子类中改变父类方法行为的实现。

在方法定义中,virtual有什么含意

被virtual修饰的方法可以被子类覆写。

能够将非静态的方法覆写成静态方法么?

不能,覆写方法的签名必须与被覆写方法的签名保持一致,除了将virtual改为override。

可以覆写私有的虚方法么?

不可以,甚至子类中无法访问父类中的私有方法。

能够阻止某一个类被其他类继承么

可以,使用关键字sealed。

能够实现允许某个类被继承,但不允许其中的某个方法被覆写么

可以,标记这个类为public,并标记这个方法为sealed。

什么是抽象类(abstractclass)?

一种不可以被实例化的类。

抽象类中一般含有抽象方法,当然也可有具体实现。

继承类只有实现过所有抽象类的抽象方法后才能被实例化。

何时必须声明一个类为抽象类

当这个类中包含抽象方法时,或是该类并没有完全实现父类的抽象方法时。

接口(interface)是什么?

只含有共有抽象方法(publicabstractmethod)的类。

这些方法必须在子类中被实现。

为什么不能指定接口中方法的修饰符

接口中的方法用来定义对象之间通信的契约,指定接口中的方法为私有或保护没有意义。

他们默认为公有方法。

可以继承多个接口么

当然。

那么如果这些接口中有重复的方法名称呢

这种情况中你可以决定如何实现。

当然需要特别得小心。

但是在编译环节是没有问题的。

接口和抽象类的区别是什么

接口中所有方法必须是抽象的,并且不能指定方法的访问修饰符。

抽象类中可以有方法的实现,也可以指定方法的访问修饰符。

如何区别重载方法

不同的参数类型,不同的参数个数,不同的参数顺序。

const和readonly有什么区别?

const关键字用来声明编译时常量,readonly用来声明运行时常量。

和有什么区别?

是不可变的字符串。

存放了一个可变的字符串,并提供一些对这个字符串修改的方法。

内容摘要:

面试题系列文章第七篇,考察了一下知识点:

private、protected、public、internal修饰符,页面之间传递值的几种方式,override与重载的区别,的错误处理机制是什么,C#中接口和类的异同等

关键词:

.NET面试题面试题c#面试题?

内容正文:

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

private:

私有成员,在类的内部才可以访问。

protected:

保护成员,该类内部和继承类中可以访问。

public:

公共成员,完全公开,没有访问限制。

internal:

在同一命名空间内可以访问。

2.写出一条Sql语句:

取出表A中第31到第40记录(SQLServer,以自动增长的ID作为主键,注意:

ID可能不是连续的。

)解1:

selecttop10*fromAwhereidnotin(selecttop30idfromA)

解2:

selecttop10*fromAwhereid>(selectmax(id)from(selecttop30idfromA)asA)

3.列举页面之间传递值的几种方式。

1.使用QueryString,如....id=1;response.Redirect()....

2.使用Session变量

3.使用

4.请说明在中常用的几种页面间传递参数的方法,并说出他们的优缺点。

(viewstate)简单,但易丢失

全局

简单,但可能不支持,可能被伪造

type="hidden"简单,可能被伪造

参数简单,显示于地址栏,长度有限

6.数据库稳定,安全,但性能相对弱

与重载的区别

Override用来重写父类的方法,重载使用相同名的方法或操作符拥有不同类型的参数

6.的错误处理机制是什么

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

#中接口和类的异同

接口和类都是类,不同的是,接口只包含方法或属性的声明,不包含具体实现方法的代码,接口可以实现多继承,而类只能是单继承,继承接口的类必须实现接口中声明的方法或属性。

接口主要定义一种规范,统一调用方法,在大型项目中接口正发挥日益重要的作用。

和DataSet的异同

DataReader和DataSet最大的区别在于,DataReader使用时始终占用SqlConnection,在线操作数据库..任何对SqlConnection的操作都会引发DataReader的异常..因为DataReader每次只在内存中加载一条数据,所以占用的内存是很小的..因为DataReader的特殊性和高性能.所以DataReader是只进的..你读了第一条后就不能再去读取第一条了..

DataSet则是将数据一次性加载在内存中.抛弃数据库连接..读取完毕即放弃数据库连接..因为DataSet将数据全部加载在内存中.所以比较消耗内存...但是确比DataReader要灵活..可以动态的添加行,列,数据.对数据库进行回传更新操作...

9.在c#中using和new这两个关键字有什么意义,请写出你所知道的意义?

Using引入一个命名空间,或在使用了一个对像后自动调用其IDespose,New实例化一个对像,或修饰一个方法,表示此方法完全重写此方法

10.在下面的例子里

usingSystem;

classA

{

publicA(){

PrintFields();

}

publicvirtualvoidPrintFields(){}

}

classB:

A

{

intx=1;

inty;

publicB(){

y=-1;

}

publicoverridevoidPrintFields(){

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

}

当使用newB()创建B的实例时,产生什么输出X=1,Y=0

二、C#部分*

13.以下哪些可以作为接口成员(多选)(ABDE)

A.方法B.属性C.字段D.事件E.索引器

F.构造函数G.析构函数

14.以下关于ref和out的描述哪些项是正确的(多选)(ACD)

A.使用ref参数,传递到ref参数的参数必须最先初始化。

B.使用out参数,传递到out参数的参数必须最先初始化。

C.使用ref参数,必须将参数作为ref参数显式传递到方法。

D.使用out参数,必须将参数作为out参数显式传递到方法。

15.“访问范围限定于此程序或那些由它所属的类派生的类型”是对以下哪个成员可访问性含义的正确描述(B)

internal

Class1

{

privatestaticintcount=0;

staticClass1()

{

count++;

}

publicClass1()

{

count++;

}

}

Class1o1=newClass1();

Class1o2=newClass1();

请问,的值是多少(C)

classBaseClass

{

publicvirtualvoidMethodA()

{

}

publicvirtualvoidMethodB()

{

}

}

classClass1:

BaseClass

{

publicvoidMethodA(stringarg)

{

}

publicoverridevoidMethodB()

{

}

}

classClass2:

Class1

{

newpublicvoidMethodB()

{

}

}

classMainClass

{

publicstaticvoidMain(string[]args)

{

Class2o=newClass2();

());

}

}

请问,调用的是:

(A)

都不是

二编写SQL语句(5分/题)50

  1)创建一张学生表,包含以下信息,学号,姓名,年龄,性别,家庭住址,联系电话

  Createtablestu(学号int,

  姓名varchar(8),

  年龄int,

  性别varchar(4),

  家庭地址varchar(50),

  联系电话int

  );

  2)修改学生表的结构,添加一列信息,学历

  Altertablestuadd学历varchar(6);

  3)修改学生表的结构,删除一列信息,家庭住址

  Altertablestudropcolumn家庭地址

  4)向学生表添加如下信息:

  学号姓名年龄性别联系电话学历

  1A22男123456小学

  2B21男119中学

  3C23男110高中

  4D18女114大学

  Insertintostuvalues(1,’A’,22,’男’,123456,’小学’)

  Insertintostuvalues(2,’B’,21,’男’,119,’中学’)

  Insertintostuvalues(3,’C’,23,’男’,110,’高中’)

  Insertintostuvalues(4,’D’,18,’女’,114,’大学’)

5)修改学生表的数据,将电话号码以11开头的学员的学历改为“大专”

  Updatestuset学历=’大专’where联系电话like‘11%’

  6)删除学生表的数据,姓名以C开头,性别为‘男’的记录删除

  Deletefromstuwhere性别=’男’and姓名like‘c%’

  7)查询学生表的数据,将所有年龄小于22岁的,学历为“大专”的,学生的姓名和学号示出来

  Select姓名,学号fromstuwhere年龄<22and学历=’大专’

  8)查询学生表的数据,查询所有信息,列出前25%的记录

  Selecttop25percent*fromstu

  9)查询出所有学生的姓名,性别,年龄降序排列

  Select姓名,性别fromstuorderby年龄desc

  10)按照性别分组查询所有的平均年龄

  Selectavg(年龄)fromstugroupby性别

已知一个表的结构为:

2

姓名科目成绩?

3

张三语文20?

4

张三数学30?

5

张三英语50?

6

李四语文70?

7

李四数学60?

8

李四英语90?

9

怎样通过select语句把他变成以下结构:

10

姓名语文数学英语?

11

张三203050?

12

李四706090

selectA.姓名,A.成绩as语文,B.成绩as数学,C.成绩as英语

fromstudentA,studentB,studentC

whereA.姓名=B.姓名andB.姓名=C.姓名

andA.科目='语文'andB.科目='数学'

andC.科目='英语'

 1,请你说说.NET中类和结构的区别

  答:

结构和类具有大体的语法,但是结构受到的限制比类要多。

结构不能申明有默认的构造函数,为结构的副本是又编译器创建和销毁的,所以不需要默认的构造函数和析构函数。

结构是值类型,所以对结构变量所做的改变不会影响其的原值,而类是应用类型,改变其变量的值会改变其原值。

申明结构用Struck关键字,申明类用class关键字,向方法传递结构是时是通过值传递的,而不是通过引用。

与类不同,结构的实例化可以不使用New关键字。

类可以实现接口。

  2,死锁的必要条件怎么克服

  答:

系统的资源不足,进程的推进的顺序不合适,资源分配不当,一个资源每次只能被一个进程使用,一个资源请求资源时,而此时这个资源已阻塞,对已获得资源不放,进程获得资源时,未使用完前,不能强行剥夺。

  3,接口是否可以继承接口抽象类是否可以实现接口抽象类是否可以继承实体类

  答:

接口是可以继承接口的,抽象类是可以实现接口的,抽象类可以继承实体类,但是有个条件,条件是,实体类必须要有明确的构造函数。

  4,构造器Constructor是否可以被继承是否可以被Override

  答:

Constructor不可以被继承,因此不能被重写(Overriding),但可以被重载(Overloading).

  5,当一个线程进入一个对象的方法后,其它线程是否可以进入该对象的方法

  答:

不可以,一个对象的方法只能由一个线程访问。

  6,用最有效的方法算出等已8对于几

  答:

2<<3.

  7,C#是否可以对内存直接进行操作

  答:

这个问题比较难回答,也是个很大的问题。

但是可以这样问答。

C#是可以对内存进行直接操作的,虽然很少用到指针,但是C#是可以使用指针的,在用的时候需要在前边加unsafe,,在中使用了垃圾回收机制(GC)功能,它替代了程序员,不过在C#中不可以直接使用finalize方法,而是在析构函数中调用基类的finalize()方法。

  8,Error和Exception有是区别

  答:

error表示恢复不是不可能,但是很困难,exception表示一种实际或实现问题,它表示程序运行正常不可以发生的。

  9,谈谈final,finally,finallize的区别

  答:

final用于申明属性,方法和类,表示属性不可变,方法不可以被覆盖,类不可以被继承。

  Finally是异常处理语句结构中,表示总是执行的部分。

  Finallize表示是object类一个方法,在垃圾回收机制中执行的时候会被调用被回收对象的方法。

  10,HashMap和Hashtable区别

  答:

HashMap是Hashtable的轻量级实现,非线程安全的实现他们都实现了map接口,主要区别是HashMap键值可以为空null,效率可以高于Hashtable。

  11,Collection和Collections的区别

  答:

Collection是集合类的上级接口,Collections是针对集合类的一个帮助类,它提供一系列静态方法来实现对各种集合的搜索,排序,线程安全化操作。

  12,C#中委托是什么事件是不是一种委托

  答:

委托是一种安全的类似与函数指针,但是她比指针要安全的多,它可以把方法作为一个参数传递给另一个方法,可以理解为指向函数的引用。

事件是一种消息机制,它是一种委托,委托不带方法体。

  13,Override,Overload,的区别

  答:

Override是重写的意思,它表示重写基类的方法,而且方法的名称,返回类型,参数类型,参数个数要与基类相同。

  Overload是重载是意思,它也表示重写基类的方法,但是只要方法名相同,别的可以不同。

  14,在一个BS结构中需要传递变量值时,不能使用session,coolke,application,你有几中方法

  答:

  15,C#种索引器实现过程,是否只能根据数字索引

  答:

不是的,可以是任意类型。

  16,New有种用法

  答:

有3种,第一种是,实例化如:

NewClass()

  第二种是,publicnew隐藏基类的方法

  第三种是,在泛型类申明中的任何类型参数都必须有公共的无参构造函数。

  17,任何把一个Array复制到Arraylist中

  答:

Foreach(objectoinArray),(0)

  等有好多种方法。

自己想。

18,概述反射和序列化

  答:

反射:

要给发射下一个定义还是比较难的,这里先说说我的理解。

反射提供了封装程序集,模块和类型对象,可以用反射动态地创建类型的实例,将类型绑定到现有对象,或者从现有对象类型里获取类型,然后调用类型的方法或访问字段和属性。

  序列化:

将对象转换为另一种媒介传输的格式过程。

如,序列化一个对象,用Http通过internet在客户端和服务器之间传递该对象,在另一端用反序列化从该流中重新得到对象。

  19,Const和ReadOnly

  答:

Const用来申明编程时申明常量,ReadOnly用来申明运行时常量。

  20,UDP和TCP连接有和异同

  答:

TCP是传输控制协议,提供的是面向连接的,是可靠的,字节流服务,当用户和服务器彼此进行数据交互的时候,必须在他们数据交互前要进行TCP连接之后才能传输数据。

TCP提供超时重拨,检验数据功能。

UDP是用户数据报协议,是一个简单的面向数据报的传输协议,是不可靠的连接。

  21,进程和线程分别该怎么理解

  答:

进程是比线程大的程序运行单元,都是由操作系统所体会的系统运行单元,一个程序中至少要有一个进程,有一个进程中,至少要有一个线程,线程的划分尺度要比进程要小,进程拥有独立的内存单元,线程是共享内存,从而极大的提高了程序的运行效率同一个进程中的多个线程可以并发执行。

  22,页面之间传递值的几种方式

答:

QueryString,session,cookies,application,,

23.什么叫应用程序域什么是托管代码什么是强类型系统什么是装箱和拆箱什么是重载CTS、CLS和CLR分别作何解释

  答:

应用程序域:

就是为安全性,可靠性,隔离性,和版本控制,及卸载程序提供的隔离边界。

它通常由运行库宿主创建,应用程序域提供了一个更安全,用途更广的处理单元。

  托管代码:

使用CLR编译语言编辑器开发编写的代码就叫托管代码。

  装箱和拆箱:

是把值类型转换为引用类型的过程,是隐式的,相反的过程就是拆箱,是显式的。

  CTS是公共类型系统,CLS是公共语言规范,CLR公共语言运行库。

  强类型系统:

每个变量和对象都必须具有申明类型。

  24.值类型和引用类型的区别

  答:

值类型的值是存放在堆栈中的,改变其值,不改变变量原有的值,而引用类型的值是存放在栈中的,

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

当前位置:首页 > 高中教育 > 高考

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

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