NET题库.docx
《NET题库.docx》由会员分享,可在线阅读,更多相关《NET题库.docx(12页珍藏版)》请在冰豆网上搜索。
![NET题库.docx](https://file1.bdocx.com/fileroot1/2022-10/13/b0c05eda-3430-49be-be45-df00e645d712/b0c05eda-3430-49be-be45-df00e645d7121.gif)
NET题库
一、C#
1.请解释在new与override的区别?
在C#中,new关键字可用作运算符或修饰符。
∙new运算符用于在堆上创建对象和调用构造函数。
∙new修饰符用于隐藏基类成员的继承成员。
使用override修饰符来修改方法、属性、索引器或事件。
重写方法提供从基类继承的成员的新实现。
由重写声明重写的方法称为重写基方法。
重写基方法必须与重写方法具有相同的签名。
不能重写非虚方法或静态方法。
重写基方法必须是虚拟的、抽象的或重写的。
重写声明不能更改虚方法的可访问性。
重写方法和虚方法必须具有相同的访问级修饰符。
不能使用下列修饰符修改重写方法:
new static virtual abstract重写属性声明必须指定与继承属性完全相同的访问修饰符、类型和名称,并且重写属性必须是虚拟的、抽象的或重写的。
2.请解释virtual的含义?
virtual关键字用于修改方法或属性的声明,在这种情况下,方法或属性被称作虚拟成员。
虚拟成员的实现可由派生类中的重写成员更改。
调用虚方法时,将为重写成员检查该对象的运行时类型。
将调用大部分派生类中的该重写成员,如果没有派生类重写该成员,则它可能是原始成员。
默认情况下,方法是非虚拟的。
不能重写非虚方法。
不能将virtual修饰符与以下修饰符一起使用:
static abstract override除了声明和调用语法不同外,虚拟属性的行为与抽象方法一样。
∙在静态属性上使用virtual修饰符是错误的。
∙通过包括使用override修饰符的属性声明,可在派生类中重写虚拟继承属性
3.请解释.net采用委托实现的事件模型与JAVA中采用接口实现的事件模型有什么区别,以图示方式解释。
4.请解释接口的显式实现有什么意义?
接口是其他类型为确保它们支持某些操作而实现的引用类型。
接口从不直接创建而且没有实际的表示形式,其他类型必须转换为接口类型。
一个接口定义一个协定。
实现接口的类或结构必须遵守其协定。
接口可以包含方法、属性、索引器和事件作为成员。
5.请以图示方式解释.netframework?
VB
C++
C#
JScript
…
CommonLanguageSpecification
XMLWeb
services
WebForms
WindowsForms
DataandXML
BaseClassLibrary
CLR
CLI
VisualStudio.NET
6.什么是.net?
.net是一种平台和框架,.net不是单纯的语言也不是单纯的工具,它是从底层平台开始构建起来的一个整体框架
6.Ref与out有什么不同?
方法参数上的ref方法参数关键字使方法引用传递到方法的同一个变量。
当控制传递回调用方法时,在方法中对参数所做的任何更改都将反映在该变量中。
若要使用ref参数,必须将参数作为ref参数显式传递到方法。
ref参数的值被传递到ref参数。
传递到ref参数的参数必须最先初始化。
将此方法与out参数相比,后者的参数在传递到out参数之前不必显式初始化。
属性不是变量,不能作为ref参数传递。
如果两种方法的声明仅在它们对ref的使用方面不同,则将出现重载。
但是,无法定义仅在ref和out方面不同的重载。
方法参数上的out方法参数关键字使方法引用传递到方法的同一个变量。
当控制传递回调用方法时,在方法中对参数所做的任何更改都将反映在该变量中。
当希望方法返回多个值时,声明out方法非常有用。
使用out参数的方法仍然可以返回一个值。
一个方法可以有一个以上的out参数。
若要使用out参数,必须将参数作为out参数显式传递到方法。
out参数的值不会传递到out参数。
不必初始化作为out参数传递的变量。
然而,必须在方法返回之前为out参数赋值。
属性不是变量,不能作为out参数传递。
如果两个方法的声明仅在out的使用方面不同,则会发生重载。
不过,无法定义仅在ref和out方面不同的重载。
7.值类型与引用类型有什么不同?
请举例说明?
并分别列举几种相应的数据类型。
大多数编程语言提供内置的数据类型(比如整数和浮点数),这些数据类型会在作为参数传递时被复制(即,它们通过值来传递)。
在.NETFramework中,这些称为值类型。
您可以创建值类型的实例,将它们作为参数传递,将它们存储为局部变量,或将它们存储在另一值类型或对象的字段中。
值类型没有与存储类的实例相关的系统开销,并且它们不需要构造函数。
值类型可以有字段、属性和事件。
它们也有静态和非静态方法。
当它们被装箱时,会从System.ValueType继承虚方法,并可实现零个或更多接口。
值类型是密封的,这意味着不能从它们派生出其他类型。
但是,可以直接对值类型定义虚方法,并且既可对该类型的已装箱形式,也可对未装箱形式调用这些方法。
尽管不能从一种值类型派生出另一种类型,但是当所用语言处理虚方法比处理非虚方法或静态方法更方便时,可以对值类型定义虚方法。
引用类型的变量又称为对象,可存储对实际数据的引用。
以下用于声明引用类型的关键字:
∙class
∙interface
∙delegate
8.结构体是值类型还是引用类型的?
是值类型。
9.C#中有没有静态构造函数,如果有是做什么用的?
有.静态构造函数用于初始化类。
在创建第一个实例或引用任何静态成员之前,将自动调用静态构造函数来初始化类。
静态构造函数既没有访问修饰符,也没有参数。
在创建第一个实例或引用任何静态成员之前,将自动调用静态构造函数来初始化类。
无法直接调用静态构造函数。
在程序中,用户无法控制何时执行静态构造函数。
静态构造函数的典型用途是:
当类使用日志文件时,将使用这种构造函数向日志文件中写入项。
10.在C#中如何实现多态?
“多态性”指定义具有功能不同但名称相同的方法或属性的多个类的能力,这些类可由客户端代码在运行时交换使用。
大部分面向对象的编程系统都通过继承提供多态性。
基于继承的多态性涉及在基类中定义方法并在派生类中使用新实现重写它们。
11.什么是反射?
如何实现反射?
反射则提供了封装程序集、模块和类型的对象。
您可以使用反射动态地创建类型的实例,将类型绑定到现有对象,或从现有对象中获取类型。
然后,可以调用类型的方法或访问其字段和属性。
通过反射命名空间中的类以及System.Type,您可以获取有关已加载的程序集和在其中定义的类型(如类、接口和值类型)的信息。
您也可以使用反射在运行时创建类型实例,然后调用和访问这些实例。
12.请解释流与文件有什么不同?
文件是一些具有永久存储及特定顺序的字节组成的一个有序的、具有名称的集合。
因此,对于文件,人们常会想到目录路径、磁盘存储、文件和目录名等方面。
相反,流提供一种向后备存储器写入字节和从后备存储器读取字节的方式,后备存储器可以为多种存储媒介之一。
正如除磁盘外存在多种后备存储器一样,除文件流之外也存在多种流。
例如,还存在网络流、内存流和磁带流等。
13.程序集与命名空间有什么不同?
命名空间是用于避免命名冲突,专用于组织代码,当代码要在其他某个应用程序中重用时,可以降低复杂性。
程序集是重用代码的一种方式
不同:
可以将相同命名空间中的类部署到不同的程序集中,也可以命名空间中的类部署到一个程序集中
命名空间
程序集
有逻辑编译时机制
有物理编译时机制
不是运行时实体
是运行时实体
为源代码元素的名称提供逻辑结构
为可执行文件的运行时提供物理结构
14.请编写一个捕获所有错误的错误处理代码
15.
16.Try{
17.…
18.}catch(Exceptione){…}
19.委托与事件是什么关系?
为什么要使用委托
•委托提供了封装方法的方式,事件是某动作已发生的说明,事件是建立于委托之上的
•程序运行时同一个委托能够用来调用不同的方法只要改变它的引用方法即可
•同一个委托能够用来调用不同的方法,只要改变它引用的方法即可,因此委托调节器用的方法不是在编译时决定的,而是在运行时确定的.
20.一个类中有几种元素?
类由字段,属性,方法组成
21.请解释这种语法现象Session[“name”]=20;
给类的索引器赋值.
22.装箱与取消装箱是什么含义?
装箱是值类型到object类型或到该值类型所实现的任何接口类型的隐式转换。
将一个值的值装箱会分配一个对象实例并将该值复制到新的对象中。
取消装箱是从object类型到值类型或从接口类型到实现该接口的值类型的显式转换。
取消装箱操作包括:
∙检查对象实例,确保它是给定值类型的一个装箱值。
∙将该值从实例复制到值类型变量中。
23.一个构造函数能否调用另一个构造函数,如果能请写出简单的代码
能.
classclass1
{
inty;
publicclass1(){
newclass1(5);
}
publicclass1(inti)
{
this.y=i;
}
publicvoidx(){
Console.WriteLine(y.ToString());
}
staticvoidMain(string[]args)
{
//
class1cl=newclass1(5);
cl.x();
}
}
24.请编写创建一个线程的代码。
usingSystem;
usingSystem.IO;
usingSystem.Threading;
classMyThread{
publicintcount;
stringthrdName;
publicMyThread(stringname){
count=0;
thrdName=name;
}
publicvoidrun(){
Console.WriteLine(thrdName+"starting.");
do{
Thread.Sleep(500);
Console.WriteLine("In"+thrdName+",countis"+count);
count++;
}while(count<10);
Console.WriteLine(thrdName+"terminating.");
}
}
classMultiThread{
publicstaticvoidMain(){
Console.WriteLine("Mainthreadstarting.");
MyThreadmt=newMyThread("Child#1");
ThreadnewThrd=newThread(newThreadStart(mt.run));
newThrd.Start();
do{
Console.Write(".");
Thread.Sleep(100);
}while(mt.count!
=10);
Console.WriteLine("Mainthreadending.");
}
}
25.Params是什么含义?
params关键字可以指定在参数数目可变处采用参数的方法参数。
在方法声明中的params关键字之