C#面试题目带完整答案.docx
《C#面试题目带完整答案.docx》由会员分享,可在线阅读,更多相关《C#面试题目带完整答案.docx(27页珍藏版)》请在冰豆网上搜索。
C#面试题目带完整答案
创作编号:
GB8878185555334563BT9125XW
创作者:
凤呜大王*
C#面试题集
1、C#中property与attribute的区别,他们各有什么用处,这种机制的好处在哪里?
A:
property和attribute汉语都称之为属性。
不过property是指类向外提供的数据区域。
而attribute则是描述对象在编译时或运行时属性的。
这两者是有本质区别的
2、讲一讲你理解的webservice,在dotnetframework中,怎么很好的结合xml?
(讲概念就行了)
从表面上看,WebService就是一个应用程序,它向外界暴露出一个能够通过Web进行调用的API。
这就是说,你能够用编程的方法通过Web调用来实现某个功能的应用程序。
从深层次上看,WebService是一种新的Web应用程序分支,它们是自包含、自描述、模块化的应用,可以在网络(通常为Web)中被描述、发布、查找以及通过Web来调用。
可扩展的标记语言XML是WebService平台中表示数据的基本格式。
除了易于建立和易于分析外,XML主要的优点在于它既与平台无关,又与厂商无关。
XML是由万维网协会(W3C)创建,W3C制定的XMLSchemaXSD定义了一套标准的数据类型,并给出了一种语言来扩展这套数据类型。
WebService平台是用XSD来作为数据类型系统的。
当你用某种语言如VB.NET或C#来构造一个WebService时,为了符合WebService标准,所有你使用的数据类型都必须被转换为XSD类型。
如想让它使用在不同平台和不同软件的不同组织间传递,还需要用某种东西将它包装起来。
这种东西就是一种协议,如SOAP。
3.C#,Java和c++的特点,有什么相同的地方,不同的地方,C#分别从c++和java中吸取了他们那些优点?
A:
C#看起来与Java有着惊人的相似;它包括了诸如单一继承,界面,与Java几乎同样的语法,和编译成中间代码再运行的过程.但是C#与Java有着明显的不同,它借鉴了Delphi的一个特点,与COM(组件对象模型)是直接集成。
微软c#语言定义主要是从C和C++继承而来的,而且语言中的许多元素也反映了这一点.C#在设计者从C++继承的可选选项方面比Java要广泛一些(比如说structs),它还增加了自己新的特点(比方说源代码版本定义).
C#从Java继承而来的特点
类:
在C#中类的申明与Java很相似。
特点看起来与Java相比没有变化.布尔运算:
条件表达式的结果是布尔数据类型,布尔数据类型是这种语言中独立的一种数据类型.从布尔类型到其他类型没有直接的转换过程.布尔常量true和false是C#中的关键字.错误处理:
如Java中那样,通过抛出和捕捉异常对象来管理错误处理过程.内存管理:
由底层.NET框架进行自动内存垃圾回收.
C#从C和C++继承的特点
编译:
程序直接编译成标准的二进制可执行形式.
结构体:
一个C#的结构体与C++的结构体是相似的,因为它能够包含数据申明和方法.但是,不象C++,C#结构体与类是不同的而且不支持继承.但是,与Java相同的是,一个结构体可以实现界面.
预编译:
C#中存在预编译指令支持条件编译,警告,错误报告和编译行控制.#error
C#独有的特点
中间代码:
微软在用户选择何时MSIL应该编译成机器码的时候是留了很大的余地.微软公司很小心的声称MSIL不是解释性的,而是被编译成了机器码.它也明白许多--如果不是大多数的话--程序员认为Java程序要不可避免的比C编写的任何东西都要慢.而这种实现方式决定了基于MSIL的程序(指的是用C#,VisualBasic,"ManagedC++"--C++的一个符合CLS的版本--等语言编写的程序)将在性能上超过"解释性的"Java代码.当然,这一点还需要得到事实证明,因为C#和其他生成MSIL的编译器还没有发布.但是JavaJIT编译器的普遍存在使得Java和C#在性能上相对相同.象"C#是编译语言而Java是解释性的,"之类的声明只是商业技巧.Java的中间代码和MSIL都是中间的汇编形式的语言,它们在运行时或其它的时候被编译成机器代码.
命名空间中的申明:
当你创建一个程序的时候,你在一个命名空间里创建了一个或多个类.同在这个命名空间里(在类的外面)你还有可能声明界面,枚举类型和结构体.必须使用using关键字来引用其他命名空间的内容.
基本的数据类型:
C#拥有比C,C++或者Java更广泛的数据类型.这些类型是bool,byte,ubyte,short,ushort,int,uint,long,ulong,float,double,和decimal.象Java一样,所有这些类型都有一个固定的大小.又象C和C++一样,每个数据类型都有有符号和无符号两种类型.与Java相同的是,一个字符变量包含的是一个16位的Unicode字符.C#新的数据类型是decimal数据类型,对于货币数据,它能存放28位10进制数字.
两个基本类:
一个名叫object的类是所有其他类的基类.而一个名叫string的类也象object一样是这个语言的一部分.作为语言的一部分存在意味着编译器有可能使用它--无论何时你在程序中写入一句带引号的字符串,编译器会创建一个string对象来保存它.
参数传递:
方法可以被声明接受可变数目的参数.缺省的参数传递方法是对基本数据类型进行值传递.ref关键字可以用来强迫一个变量通过引用传递,这使得一个变量可以接受一个返回值.out关键字也能声明引用传递过程,与ref不同的地方是,它指明这个参数并不需要初始值.
与COM的集成:
C#对Windows程序最大的卖点可能就是它与COM的无缝集成了,COM就是微软的Win32组件技术.实际上,最终有可能在任何.NET语言里编写COM客户和服务器端.C#编写的类可以子类化一个以存在的COM组件;生成的类也能被作为一个COM组件使用,然后又能使用,比方说,JScript语言子类化它从而得到第三个COM组件.这种现象的结果是导致了一个运行环境的产生,在这个环境里的组件是网络服务,可用用任何.NET语言子类化.
索引下标:
一个索引与属性除了不使用属性名来引用类成员而是用一个方括号中的数字来匿名引用(就象用数组下标一样)以外是相似的.
代理和反馈:
一个代理对象包括了访问一个特定对象的特定方法所需的信息.只要把它当成一个聪明的方法指针就行了.代理对象可以被移动到另一个地方,然后可以通过访问它来对已存在的方法进行类型安全的调用.一个反馈方法是代理的特例.event关键字用在将在事件发生的时候被当成代理调用的方法声明中.
4.C#可否对内存进行直接的操作?
(这可是个难点哦?
要注意!
)
A:
C#在Unsafe模式下可以使用指针对内存进行操作,但在托管模式下不可以使用指针
5.用VisualC++6.0编写的代码(unmanagedcode),如何在CLR下和其他dotnetcomponent结合?
A:
。
net与Com互操作在.net中可以通过添加引用的方式将COM加载在CLR下,将原有的COM中的类型相应变化为.Net下可识别的类型
6.用C#实现以下功能
a 产生一个int数组,长度为100,并向其中随机插入1-100,并且不能重复。
b 对上面生成的数组排序,需要支持升序、降序两种顺序
Aa:
usingSystem;
publicclassMainEntry
{
publicstaticvoidMain()
{
int[]arrayint=newint[100];
Randomrandom=newRandom
(1);
for(inti=1;i<=100;i++)
{
intindex=random.Next(0,100);
if(arrayint[index]==0)
arrayint[index]=i;
else
i--;
}
foreach(intiinarrayint)
{
Console.Write(i);
Console.Write("\t");
}
}
}
7。
请说明在.net中常用的几种页面间传递参数的方法,并说出他们的优缺点。
1查询字符串。
优点:
简单易用;资源占用比较少。
缺点:
传递数据大小有限制,只能传递基本类型的数据,安全性差
2页面提交(POST)
优点安全性高,简单易用,资源占用多
缺点:
只适合在HTML页面中使用,传递数据多,不能传递对象。
3Server.Trantfer()
优点安全性高灵活性强能传递复杂的对象
创作编号:
GB8878185555334563BT9125XW
创作者:
凤呜大王*
缺点资源消耗大
4Session
优点安全性高灵活性强能传递复杂的对象
缺点资源消耗大
5Appliction
优点安全性高灵活性强能传递复杂的对象
缺点资源消耗大
6Cookie
缺点大小有限制不能超过4KB不恩能够存储复杂对面
8。
请说明.net中的错误处理机制,并举例
Try
{
//……//
}
Catch()
{
Throwe;
}
Finally
{
Conn.Close();
}
9。
请说出强名的含义
对程序集,进行公钥/私钥对签名。
称为强名,用名称,版本,文化,公钥唯一确定程序集
10。
请列出c#中几种循环的方法,并指出他们的不同
A:
4种:
For:
使用于确定次数的循环
Foreach:
使用于遍历的元素只读
Do…while:
次数不确定条件随机变化但至少要保证能被执行一次
While:
次数不确定条件随机变化
11。
请指出.net中所有类型的基类
A:
object
12。
请指出GAC的含义
A:
全局程序机缓存(GlobalAssemblyCache)存放共享程序几的文件夹GAC中的程序机可被任何项目使用
13。
SQL SREVER中,向一个表中插入了新数据,如何快捷的得到自增量字段的当前值
A:
InserttableNamevalues()
Select@@IDENTITY
14.您在什么情况下会用到虚方法或抽象类?
它与接口有什么不同?
A:
如果某个方法可能性在派生类中会被重写。
这时就将该方法写为虚方法。
抽象类:
是一个类型,与派生类之间的关系是一个“ISA”的关系。
用来做基类
语法:
抽象类不能创建对象,类中包括抽象方法和实例方法。
接口:
设计:
接口是一个规范,描述了Cando;与实现类之间是中”LINEA的关系
语法接口可以多实现C#中接口不能包含字段访问修饰符。
15:
Override与重载有什么区别?
A:
override是方法重写,而overload是方法重载.
Override发生在基类与派生类之间,派生类中的方法用override修饰表示重写基类中同名的方法,派生类的重写方法与基类中方法签名一致,并只能重写基类中声明为abstact,virtual、override的方法。
Overload发生在同一作用域中,如类域,表示类中的方法的不同版本,实现重载的方法必须方法名称相同,方法参数列表不同,
16:
值类型与引用类型有什么区别?
基于值类型的变量直