1.选择题
1. 简述下面选项能够捕获运算溢出的异常类型的有 ?
A)Exception
B)SystemException
C)ArithmeticException
D)OverflowException
试题回答:AD
2. 程序员可使用()语句以程序方式引发异常 ?
A)run
B)try
C)throw
D)Catch.Exception
试题回答:C
3.所有C#异常都派生自()类 ?
A)Windows
B)Exception
C)Common.Exception
D)System.Data
试题回答:B
4.简述下列说法中正确的是 ?
A)在C#中,编译时对数组下标越界将作检查
B)在C#中,程序运行时,数组一下标越界也不会产生异常
C)在C#中,程序运行时,数组下标越界是否产生异常由用户确定
D)在C#中,程序运行时,数组下标越界一定会产生异常
试题回答:D
5.简述关于异常,下列的说法中不正确的是 ?
A)用户可以根据需要抛出异常
B)在被调用方法可通过throw语句把异常传回给调用方法
C)用户可以自己定义异常
D)在C#中有的异常不能被捕获
试题回答:D
6.简述为了能够在程序中捕获所有的异常,在catch语句的括号中使用的类名为() ?
A)Exception
B)DivideByZeroExection
C)FomatException
D)以上三个均可
试题回答:A
7.简述下列关于try…catch…finaly语句的说明中,不正确的是 ?
A)catch块可以有多个
B)finaly总会执行
C)catch块也是可选的
D)可以只有try块
试题回答:D
8.简述下列哪些选项是.NET异常处理的特点 ?
A).NET异常对象是一种特殊格式的32位整型值
B)C#代码中抛出的异常对象,只能在C#编写的代码中捕获
C)无法跨越进程边界引发和捕获异常对象
D)不同编程语言抛出/捕获异常对象的句法可以不同
试题回答:D
9.简述在C#中,在方法MyFunc内部的try…catch语句中,如果在try代码块中发生异常,并且在当前的所有catch块中都没有找到合适的catch块,则 ?
A).NET运行时忽略该异常
B).NET运行时马上强制退出该程序
C).NET运行时继续在MyFunc的调用堆栈中查找提供该异常处理的过程
D).NET抛出一个新的“异常处理未找到”的异常
试题回答:C
10.简述在.NET中,以下都是System.IO中定义的类,除了() ?
A)Stream
B)StreamWriter
C)StreamReader
D)FileReader
试题回答:D
11.下面针对FileMode枚举描述中正确的是() ?
A)Append打开文件后指向文件的开头
B)CreateNew用于创建新文件,当存在时会覆盖文件
C)Open用于打开文件,当文件不存在时会出错
D)以上都错
试题回答:C
12.简述用FileStream打开一个文件时,为了控制该FileStream用于创建不存在的文件,应将其()参数设置为Create ?
A)FileShare
B)seekorigin
C)FileAccess
D)FileMode
试题回答:D
13.简述以下关于序列化和反序列化的描述错误的是 ?
A)序列化是将对象的状态存储到特定存储介质中的过程
B)二进制格式化器的Serialize()和Deserialize()方法可以分别用来实现序列化和反序列化过程
C)如果一个类可以序列化,可它的子类和包含的各成员对象也一定可序列化
D)标识一个类可以序列化要使用[Serializable]
试题回答:C
14.C#中,将类加上()属性来标记该类支持序列化() ?
A)[Serializable]
B)[Formatable]
C)[Stream]
D)[STAThread]
试题回答:A
15.下列不属于C#预定义特性的是 ?
A)[Compliant]
B)[DllImport]
C)[Serializable]
D)[Obsolete]
试题回答:A
16.简述下列说法错误的是 ?
A)特性是派生System.Attribute的类
B)特性导致嵌入的元数据。
C)特性在代码中间用大括号来应用
D)直到被其他代码反射,特性才发挥使用
试题回答:C
17.下面不属于特性属性的是 ?
A)特性可向程序中添加元数据
B)可以将一个或多个特性应用到整个程序集、模块或较小的程序元素(如类和属性)
C)特性不可以与方法和属性相同的方式接受参数
D)程序可以使用反射检查自己的元数据或其他程序内的元数据
试题回答:C
18.简述下面特性不能标识的内容有 ?
A)类
B)属性
C)方法
D)应用程序
试题回答:D
19.简述dynamic不能使用的是() ?
A)类型的字段
B)方法参数
C)方法返回值
D)方法调用
试题回答:D
20.简述dynamic类型的不能操作的是() ?
A)接受“静态类型”的构造器创建对象
B)赋值
C)自乘
D)方法调用
试题回答:C
21.简述下面不属于Type类的方法 ?
A)GetConstructor()
B)GetInterface()
C)GetObject()
D)GetMethod()
试题回答:C
22.下面不属于Type类的属性是 ?
A)IsClass
B)IsEnum
C)IsObject
D)IsAbstract
试题回答:C
23.下面不属于System.Reflection空间的成员是 ?
A)Assembly
B)MemberInfo
C)IsClass
D)PropertyInfo
试题回答:C
24.简述反射引用的命名空间 ?
A)System.IO
B)System.Collections.Generic
C)System.Text
D)System.Reflection
试题回答:D
25.下面关于反射的说法错误的是() ?
A)使用反射需要引用System.Reflection命名空间
B)反射用于在运行时通过编程方式获得类型信息
C)如果不提供解决方案,则无法反射程序集
D)反射可以可看程序集的信息
试题回答:C
26.某程序集的版本为:"2.0.1.112"则该程序集的次版本号为 ?
A)0.0
B)1.0
C)2.0
D)112.0
试题回答:A
27.简述.NET Framework类库中的“命名空间”是一种 ?
A)类型
B)结构类型
C)数据库
D)命名规范
试题回答:D
2.问答题
1.C#中什么是 NuGet?
NuGet 是一个自由开源软件包管理系统,以前称 NuPack。 2010 年首次发布,已经进化为一个庞大的工具与服务生态系统。
NuGet 能够简化在 Visual Studio 项目中添加、更新和删除库的操作。
NuGet 包是打包成单个 ZIP 文件,文件扩展名是.nupkg,使用开放打包约定 (OPC) 格式,包含编译代码 (Dll)、与该代码相关的其他文件以及描述性清单(包含包版本号等信息)。
NuGet 也可以用于命令行或者脚本自动化。
2.解释什么是params关键字,如何使用?
params 是C#的关键字, params主要是在声明方法时参数类型或者个数不确定时使用,关于params 参数数组。
3.解释什么是不可变字符串?
不可变字符串是不能更改的对象,尽管你可以更改对它的引用。
只要你有绝对不应该更改的常量,就应该使用不可变字符串。
如果尝试更改不可变字符串,它可能会引发错误。
4.阐述什么是 C# 中的哈希表?
哈希表通常包含“键”和“值”。你经常会听到关于密码的“哈希表”;可以为给定的密码创建密码哈希。
哈希表本身只是键对象和值对象的通用集合,其中的值必须使用键来访问;否则无法访问它们。
5.解释 C# 中的代码编译?
程序员编写人们可读的代码,然后将该代码输入 C# 编译器。
C# 编译器会将代码编译成高效、机器可读的托管代码,称为字节码。
然后,即时编译器 (JIT) 会将字节码编译为本机或机器语言。
当程序运行时,CPU会直接执行这段代码。
6.C# 如何使用可空类型?
空值可以分配给 C# 中的变量。
这些类型称为可空类型。
大多数变量类型都是可为空的类型。
7.阐述什么是 C# 中的 LINQ?
LINQ 是指语言集成查询,LINQ 是一种使用 .NET 功能和类似于 SQL 的 C# 语法查询数据的方法。
LINQ 的优点是我们可以查询不同的数据源。
数据源可以是对象的集合、XML 文件、JSON 文件、内存中的数据或列表或数据库对象。
我们可以轻松地从任何实现 IEnumerable 接口的对象中检索数据。下面是 LINQ 的语法。
8.解释什么是自定义异常?
自定义异常用于根据用户要求捕获的错误,而不是内置在编译器中的错误。
自定义异常是实例化用户定义异常的一种简单方法。
9.C#中的异常处理是如何完成的?
异常处理通过 try、catch、finally 和 throw 模型进行管理。
这些是整个模型中使用的关键字。下面是每个关键字的解释:
Try:我们将代码保存在我们想要处理异常的 try 块中。
Catch:当 try 块中发生任何异常时,在异常处理程序的帮助下将其捕获到 catch 块中。
finally:为了不考虑错误地执行代码块,我们将该代码放在 finally 块中以执行。
Throw:发生问题时抛出异常。
10.解释 var 和 dynamic ?
var
(1)均是声明动态类型的变量。
(2).在编译阶段已经确定类型,在初始化的时候必须提供初始化的值。
(3).无法作为方法参数类型,也无法作为返回值类型。
dynamic
(1).均是声明动态类型的变量。
(2).运行时检查类型,不存在语法类型,在初始化的时候可以不提供初始化的值。
(3).反射时简化代码,但会产生性能的缺失。
11.“throw”和“throw ex”有什么区别?
throw”语句将保留前一个函数的原始错误堆栈,而“throw ex”语句将保留从抛出点开始的堆栈跟踪。
通常,建议使用“throw”,因为它提供了准确的错误信息和跟踪数据。
12. 解释什么是C#中的交错数组?
交错数组就像一个嵌套数组,其中交错数组的每个元素本身就是一个数组。
锯齿状数组的项目可以具有不同的维度和大小。
锯齿状数组是 C# 中引入的一种特殊类型的数组。
锯齿状数组是数组的数组,其中每个数组索引的长度可以不同。
13.System.Array.CopyTo() 和 System.Array.Clone() 有什么区别?
使用 Clone() 方法,我们可以使用 CopyTo() 方法创建一个包含原始数组的所有元素的新数组对象。
现有数组的所有项目都复制到另一个现有数组中。两种方式都会创建一个浅拷贝。
14.阐述什么是枚举?
枚举”关键字在许多语言中都很常见。枚举是一种值,它用作相关常量的集合,称为枚举列表。
枚举可以是 int、float、double 或 byte。但如果它不是 int,则需要显式转换。
.NET 框架枚举可用于创建数字常量。Int 是枚举元素的默认值。
默认情况下,第一个枚举数的值为 0,并且每个后续的枚举数都增加 1,就像一个数组一样。
15.举例阐述什么是装箱和拆箱?
引用类型(对象)数据类型的转换称为装箱。
拆箱是将引用类型数据类型转换为值类型。
16.解释“continue”和“break”语句 ?
在 C# 的循环中使用 continue 和 break 语句。
使用 break 语句,我们可以中断循环执行,而使用 continue 语句,我们可以中断循环的一次迭代。
17.常量和只读变量有什么区别?
常量变量只能在声明时赋值,我们不能在整个程序中更改该变量的值。
我们可以在声明时或在同一类的构造函数中将值分配给只读变量。
18.用例子解释 C# 中的注释类型?
C# 中有三种类型的注释:
单行注释,示例是://嘿,这是单行注释
多行注释,示例是:/*这是一个多行注释写成两行*/
XML 注释,示例是:///概括///这里可以写任何东西///概括
19.using() 语法有⽤吗?什么是IDisposable?
有⽤,实现了IDisposiable的类在using中创建,using结束后会⾃定调⽤该对象的Dispose⽅法,释放资源。
20.ExecuteScalar 和 ExecuteNonQuery 的区别?
ExecuteNonQuery:返回受影响的⾏数。
ExecuteScalar:返回结果集的第⼀⾏第⼀列,忽略其他⾏。
21.NET和C#有什么区别?
.NET⼀般指 .NET FrameWork框架,它是⼀种平台,⼀种技术。
C#是⼀种编程语⾔,可以基于.NET平台的应⽤。
22.C# 中的异常类有哪些?
- C# 异常是使⽤类来表示的,异常类主要是直接或间接地派⽣于 System.Exception 类。
- System.ApplicationException 和 System.SystemException 类是派⽣于 System.Exception 类的异常类。
- System.ApplicationException 类⽀持由应⽤程序⽣成的异常,所以我们⾃⼰定义的异常都应派⽣⾃该类。
- System.SystemException 类是所有预定义的系统异常的基类。
- System.IO.IOException ⽤于处理 I/O 错误(读写⽂件)。
- System.IndexOutOfRangeException ⽤于处理当⽅法指向超出范围的数组索引时⽣成的错误。
- System.ArrayTypeMismatchException ⽤于处理当数组类型不匹配时⽣成的错误。
- System.NullReferenceException ⽤于处理当依从⼀个空对象时⽣成的错误。
- System.DivideByZeroException ⽤于处理当除以零时⽣成的错误。例如:100/0就会报这个错误。
- System.InvalidCastException ⽤于处理在类型转换期间⽣成的错误。
- System.OutOfMemoryException ⽤于处理空闲内存不⾜⽣成的错误。
- System.StackOverflowException ⽤于处理栈溢出⽣成的错误。
23.解释什么是匿名⽅法?
匿名⽅法是⽤作委托的参数的⼀段代码。
//匿名⽅法例子:
Func anon = delegate(int i)
{
i = i+1;
return i;
};
//输出2
Console.WriteLine(anon(1));
//匿名⽅法例子:
Action anon2 = delegate(int i)
{
i = i + 1;
};
//输出2
Console.WriteLine(anon(1));
24. C# &和&&的区别?
相同点:
&和&&都可作逻辑与的运算符,表示逻辑与(and),当运算符两边的表达式的结果都为true时,其结果才为true,否则,只要有⼀⽅为false,则结果为false。
不同点:
&&具有短路的功能,即如果第⼀个表达式为false,则不再计算第⼆个表达式,对于上⾯的表达式,当loginUser为null时,后⾯的表达式不会执⾏,所以不会出现NullPointerException如果将&&改为&,则会抛出NullPointerException异常。& 是⽤作位运算的。
总结:
&是位运算,返回结果是int类型 &&是逻辑运算,返回结果是bool类型。
25.byte b = 'a'; byte c = 1; byte d = 'ab'; byte e = '啊'; byte g = 256; 这些变量有些错误是错 再哪⾥?
'a'是char类型,a错误。
1byte =8bit,1个汉字=2个byte,1个英⽂=1个byte=8bit所以bc是对的,deg是错的。
java byte取值范围是-128~127, ⽽C#⾥⼀个byte是0~255。
26.Application 、Cookie和 Session 两种会话有什么不同?
27.string、String;int、Int32;Boolean、bool的区别 ?
String、Int32、Boolean等都属于.Net中定义的类,而string、int、bool相当于C#中对这些类定义的别名。
28.请叙述const与readonly的区别?
- const 关键字用于修改字段或局部变量的声明。它指定字段或局部变量的值不能被修改。常数声明引入给定类型的一个或多个常数。
- const数据成员的声明式必须包含初值,且初值必须是一个常量表达式。因为它是在编译时就需要完全评估。
- const成员可以使用另一个const成员来初始化,前提是两者之间没有循环依赖。
- readonly在运行期评估赋值,使我们得以在确保“只读访问”的前提下,把object的初始化动作推迟到运行期进行。
- readonly 关键字与 const 关键字不同: const 字段只能在该字段的声明中初始化。readonly 字段可以在声明或构造函数中初始化。因此,根据所使用的构造函数,readonly 字段可能具有不同的值。另外,const 字段是编译时常数,而 readonly 字段可用于运行时常数。
- readonly 只能在声明时或者构造函数里面初始化,并且不能在 static 修饰的构造函数里面。
29.StringBuilder 和 String 的区别?
- 字符串是不可变的对象。当我们必须执行一些操作来更改字符串或附加新字符串时,它会清除字符串对象的旧值,并在内存中创建一个新实例以将新值保存在字符串对象中。
- StringBuilder 是一个可变对象,这意味着它每次都会为添加字符串(追加),替换字符串(替换)等操作创建一个新实例。它仅将旧对象用于对字符串执行的任何操作,从而提高性能。
30.接口是一种引用类型,在接口中可以声明( ),但不可以声明公有的域或私有的成员变量。
方法、属性、索引器和事件;
31.int、DateTime、string是否可以为null?
int、DateTime不能,因为其为Struct类型,而结构属于值类型,值类型不能为null,只有引用类型才能被赋值null。string可以为null。
32. 解释什么是强类型,什么是弱类型?哪种更好些?
- 强类型是在编译的时候就确定类型的数据,在执行时类型不能更改,而弱类型在执行的时候才会确定类型。
- 二者各有好处,强类型安全,因为它事先已经确定好了,而且效率高。弱类型更灵活,但是效率低,而且出错概率高。
- 一般用于编译型编程语言,如c++,java,c#,pascal等,弱类型相比而言不安全,在运行的时候容易出现错误,但它灵活,多用于解释型编程语言,如javascript,vb等。
33.Swtich 表达式可以⽤什么类型? string 类型可以?
swtich 表达式是⼀个整型(byte、int、long等),字符或字符串类型。
34.数组和 string 有没有Length()这个⽅法?
都没有Length()这个⽅法,只有Length属性。
35.C# 静态成员和⾮静态成员的区别?
- 静态变量使⽤ static 修饰符进⾏声明,不带有 static 声明的变量为⾮静态变量。
- 静态变量在类被实例化时创建,通过类进⾏访问;⾮静态变量在对象被实例化时创建,通过对象进⾏访问。
- 静态函数的实现⾥不能使⽤⾮静态成员,包含⾮静态变量和⾮静态函数;但⾮静态函数可以使⽤静态成员。
36.as 和 is 的区别?
- as 在转换的同时判断兼容性,如果⽆法转换返回 null ,as 转换是否成功判断的依据是结果是否为 null。
- is 只是做类型兼容性的判断,并不执⾏真正的类型转换,返回 true 或 false。
- 效率上 as ⽐ is 更⾼,as 只做⼀次类型兼容检查 。
37.C# ref 和 out 的区别?
- ref 传参时,传⼊的参数必须先被初始化;out 不必初始化参数的变量;
- ref 传进去的参数在函数内部可以直接使⽤,⽽ out 不可以。
- ref 传进去的参数在函数内部可以不被改变,但 out 必须在函数体结束前进⾏赋值。
38.值类型和引⽤类型的区别?
(1).分配不同:
值类型存储在栈中,引⽤类型存储在堆中。
(2).释放⽅式不同:
值类型在作⽤域内结时,会被系统⾃动释放,可⼼减少托管堆的压⼒;引⽤类型则靠GC,所以在性能上值类型优势⽐较明显。
(3).继承不同:
引⽤类型继承Object,且也可以被其它类继承。值类型不能作为基类,但是可以继承或者多继承接⼝。另外,值类型是继承ValueType,⽽引⽤类型不会继承ValueType。
(4).传参⽅式不⼀样:
值类型在传参的时候是复制内存的数据,⽽引⽤类型通过它们的引⽤来查找的,所以传参是共享⼀个内存地址。
(5).初始化⾏为不同:
引⽤类型需要通过 new 来创建对象。
39.i++ 和 ++i 有什么区别?
i++ 是先赋值,再⾃增;++i 是先⾃增,再赋值。
40.String与Int的区别?
string、int是C#定义的类型,而String、Int32是.net类型即是CTS类型;
string 是 .NET 框架中 System.String 的别名。
string在编译的时候会转化为String类
40.C#请解释什么是上下文对象,在什么情况下要使用上下文对象?
HttpContext 封装有关个别 HTTP 请求的所有 HTTP 特定的信息。
在Golbal.asax 中访问特定请求的信息时使用。
41.Public static const int A=1;这段代码有错误么?是什么?
Static const 不能同时作用在一个变量上, const 为隐式静态。
42.C# 怎样理解静态变量?
静态变量属于类,而不属于对象,并对所有对象所享,静态成员在加类的时候就被加载。
43.C# 值类型与引用类型有什么区别?
- 基于值类型的变量直接包含值。将一个值类型变量赋给另一个值类型变量时,将复制包含的值。
- 这与引用类型变量的赋值不同,引用类型变量的赋值只复制对对象的引用,而不复制对象本身。
- 所有的值类型均隐式派生自 System.ValueType。
- 与引用类型不同,从值类型不可能派生出新的类型。但与引用类型相同的是,结构也可以实现接口。
- 与引用类型不同,值类型不可能包含 null 值。然而,可空类型功能允许将 null 赋给值类型。
- 每种值类型均有一个隐式的默认构造函数来初始化该类型的默认值。
- 值类型主要由两类组成:结构、枚举
- 结构分为以下几类:Numeric(数值)类型、整型、浮点型、decimal、bool、用户定义的结构。
- 引用类型的变量又称为对象,可存储对实际数据的引用。
- 声明引用类型的关键字:class、interface、delegate、内置引用类型: object、string。
44.请列出C#中几种循环的方法,并指出他们的不同?
4种:
For :使用于确定次数的循环
Foreach:使用于遍历的元素 只读
Do…while: 次数不确定条件随机变化但至少要保证能被执行一次
While:次数不确定 条件随机 变化
45.请说明.Net中的错误处理机制,并举例?
Try
{
//……//
}
Catch()
{
Throw e;
}
Finally
{
Conn.Close();
}
46.C#, Java 和 c++的特点,有什么异同, C#分别从c++和java中吸取了他们那些优点?
C#与Java的相似:它包括了诸如单一继承,与Java几乎同样的语法,编译成中间代码再运行的 过程。但是C#与Java有着明显的不同,C#借鉴了Delphi与COM(组件对象模型)是直接集成的特点。
C#语言定义是从C和C++继承而来的,C#还增加了自己新的特点(例如:源代码版本定义)。
C#从Java继承而来的特点:
- (1).C#中类的申明与Java很相似。
- (2).布尔运算,条件表达式的结果是布尔数据类型,布尔常量true和false是C#中的关键字。
- (3).错误处理,在Java中那样,通过抛出和捕捉异常对象来管理错误处理过程。
- (4)内存管理,由 底层.NET框架进行自动内存垃圾回收。
C#从C和C++继承的特点:
- (1)编译,程序直接编译成标准的二进制可执行形式.
- (2).结构体,C#的结构体与C++的结构体是相似的,因为它能够包含数据申明和方法。不同之处是,C#结构体不支持继承。
- (3)预编译,C#中存在预编译指令支持条件编译,警告,错误报告和编译行控制。
C#独有的特点:
- (1).中间代码,程序员认为Java程序通常比C#编写的代码编译都要慢一些,这是因为MSIL(微软中间语言)的程序将在性能上超过"解释性的"Java代码。Java的中间代码和 MSIL都是中间的汇编形式的语言,它们在运行时或其它的时候被编译成机器代码.
- (2).命名空间中的申明:你在同一个命名空间里创建了一个或多个类。通过使用using关键字来引用其他命名空间的内容,你还有可能声明枚举类型和结构体。
- (3).基本的数据类型:C#拥有比C,C++或者Java更广泛的数据类型。这些类型是bool, byte, ubyte, short, ushort, int, uint, long, ulong, float, double,和decimal。
- 像Java一样,所有这些类型都有一个固定的大小,此外一个字符变量包含的是一个16位的Unicode字符。C#跟C和C++一样,每种数据类型都有有符号和无符号两种类型。C#新的数据类型是decimal数据类型,对于货币数据,它能存放28位10 进制数字.
- (4).object的类是所有其他类的基类,而一个名叫string的类也象object一样是这个语言的一部分,作为语言的一部分存在意味着编译器有可能使用它。
- (5).参数传递:方法可以被声明接受可变数目的参数,缺省的参数传递方法是对基本数据类型进行值传递。ref关键字可以用来强迫一个变量通过引用传递,这使得一个变量可以接受一个返回值,而out关键字也能声明引用传递过程。与ref不同的地方是,它指明这个参数并不需要初始值。
- (6).与COM 的集成:C#对Windows程序最大的优势是它与COM的无缝集成了,而COM是微软的Win32组件技术。
47.列举ASP.NET 页面之间传递值的几种方式。
(1).QueryString是一种非常简单的传值方式,他可以将传送的值显示在浏览器的地址栏中。
如果是传递一个或多个安全性要求不高或是结构简单的数值时,可以使用这个方法。
优点:使用简单,对于安全性要求不高时传递数字或是文本值非常有效。
缺点:缺乏安全性,由于它的值暴露在浏览器的URL地址中的。不能传递对象。
(2).Session其操作与Application类似,通常存储用户个人信息,过量的存储会导致服务器内存资源的耗尽。
优点:使用简单,不仅能传递简单数据类型,还能传递对象,数据量大小是不限制的。
缺点:在Session变量存储大量的数据会消耗较多的服务器资源,容易丢失。
(3).Cookie,Cookie用于在用户浏览器上存储小块的信息,比如用户访问某网站时用户的ID。Cookie通过HTTP头在浏览器和服务器之间来回传递的。Cookie只能包含字符串的值,如果想在Cookie存储整数值,那么需要先转换为字符串的形式。
优点:使用简单,是保持用户状态的一种非常常用的方法。比如在购物网站中用户跨多个页面表单时可以用它来保持用户状态。
缺点:常常被人认为用来收集用户隐私而遭到批评。安全性不高,容易伪造。
(4).Application对象的作用范围是整个全局,它在整个应用程序生命周期中都是有效的。它和Session变量的区别在于,前者是所有的用户共用的全局变量,后者是各个用户独有的全局变量。
优点:使用简单,消耗较少的服务器资源。不仅能传递简单数据,还能传递对象。数据量大小是不限制的。
缺点:作为全局变量容易被误操作。所以单个用户使用的变量一般不能用application。
(5).Server.Transfer,使用Server.Transfer方法把流程从当前页面引导到另一个页面中,新的页面使用前一个页面的应答流,所以这个方法是完全面象对象的,简洁有效。
调用Server.Transfer时,当前的ASPX页面终止执行,执行流程转入另一个ASPX页面,但新的ASPX页面仍使用前一ASPX页面创建的应答流。
优点:直接在服务器端重定向,使用简单方便,减少了客户端对服务器端提出请求。可以传递各种数据类型的值和控件的值。
缺点:客户端浏览器中的URL地址是不改变,会导致在新的页面可能出现一些意想不到的问题。例如:源页面和目的页面不在同一个虚拟目录或其子目录下,那么使用相对路径的图片、超链接都会导致错误的指向。
48. 什么叫应用程序域?什么是受管制的代码?什么是强类型系统?什么是装箱和拆箱?什么是重载?CTS、CLS和CLR分别作何解释?
- (1) 应用程序域(通常为 AppDomain)是一个用于隔离应用程序的虚拟进程。
- (2) 受管制的代码:Managed Code,官方翻译是“托管代码”,即在 .net中,由公共语言运行环境进行管理的代码,它主要负责内存管理。
- (3)强类型系统:是对系统的类型进行细化定义,纯粹是概念问题,不做深入研究的话,看书理解一下就行。
- (4)装箱和拆箱:值类型转化引用类型为装箱,引用类型转化为值类型为拆箱。
- (5)CTS:通用语言系统。CLS:通用语言规范。CLR:公共语言运行库。
49.<%# %> 和 <% %> 有什么区别?
<%# %>表示绑定的数据源,<% %>是服务器端代码块。
50.C#可否对内存进行直接的操作?
在.net下.net引用了垃圾回收(GC)功能,它替代了程序员不过在C#中,不能直接实现Finalize方法,而是在析构函数中调用基类的Finalize()方法。
51 .Net的错误处理机制是什么?
.net错误处理机制采用try->catch->finally结构,发生错误时,层层上抛,直到找到匹配的Catch为止。
52.C#中 property 与 attribute的区别,他们各有什么用处,这种机制的好处在哪里?
property和attribute汉语都称之为属性。不过property是指类向外提供的数据区域。而attribute则是描述对象在编译时或运行时属性的。
53.解释什么是Code-Behind技术?
aspx,resx和cs三个后缀的文件,这个就是代码分离,实现了HTML代码和服务器代码分离。方便代码编写和整理。
54.C# final,finally, finalize的区别?
- final:如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承。因此一个类不能既被声明为 abstract的,又被声明为final的。将变量或方法声明为final,可以保证它们在使用中 不被改变。被声明为final的变量必须在声明时给定初值,而在以后的引用中只能读取,不可修改。被声明为 final的方法也同样只能使用,不能重载。
- finally:再异常处理时提供 finally 块来执行任何清除操作。如果抛出一个异常,那么相匹配的 catch 子句就会执行,然后控制就会进入 finally 块。
- finalize:方法名,C#使用finalize() 方法在垃圾收集器将对像从内存中清除出去之前做必要的清理工作。finalize() 由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。它是在 Object 类中定义的 ,因此所有的类都继承了它。子类覆盖 finalize() 方法以整理系统资源或者执行其他清理工作。finalize() 方法是在垃圾收集器删除对像之前对这个对象调用的。
55.C#语言中的sleep() 和 wait() 有什么区别?
sleep()方法是将当前线程挂起指定的时间。
wait()释放对象上的锁并阻塞当前线程,直到它重新获取该锁。
56 .Net Remoting 的工作原理是什么?
服务器端向客户端发送一个进程编号,一个程序域编号,以确定对象的位置。
57.C# Error和Exception有是区别?
error表示很难恢复的错误,exception表示一种实现问题,它在程序运行正常不可以发生的。
58.C#是否可以继承String类?
因为String类是final类所以不可以继承string类。
59.ASP.NET中常见内置对象?
Response、Request、Server、Session、Application、Cookie 。
60.C# new 关键字用法
(1)new 运算符 用于创建对象和调用构造函数。
(2)new 修饰符 用于向基类成员隐藏继承成员。
(3)new 约束 用于在泛型声明中约束可能用作类型参数的参数的类型。
61.ADO.NET中的五个主要对象,并简单描述?
- Connection:主要是开启程序和数据库之间的连接。关闭连接,Close和Dispose的区别,Close以后还可以Open,Dispose以后则不能再用。
- Command:主要可以用来对数据库发出一些指令,例如可以对数据库下达查询、新增、修改、删除数据等指令,以及调用存在数据库中的存储过程等。
- DataAdapter:主要是在数据源以及DataSet 之间执行数据传输的工作,它可以透过Command 对象下达命令后,并将取得的数据放入DataSet 对象中。这个对象是架构在Command对象上,并提供了许多配合DataSet 使用的功能。
- DataSet:这个对象可以可以把从数据库中所查询到的数据保留起来,DataSet是放在内存中的。DataSet 的能力不只是可以储存多个Table 而已,还可以透过DataAdapter对象取得一些例如主键等的数据表结构,并可以记录数据表间的关联。DataAdapter对象当做DataSet 对象以及数据源间传输数据的桥梁。DataSet包含若干DataTable、DataTableTable包含若干DataRow。
- DataReader:DataReader对象只是一次一笔向下循序的读取数据源中的数据,这些数据是存在数据库服务器中的,而不是一次性加载到程序的内存中的,只能(通过游标)读取当前行的数据,而且这些数据是只读的,并不允许作其它的操作。因为DataReader 在读取数据的时候限制了每次只读取一笔,而且只能只读,所以使用起来不但节省资源而且效率很好。使用DataReader 对象除了效率较好之外,因为不用把数据全部传回,故可以降低网络的负载。
- ADO.NET 使用Connection 对象来连接数据库,使用Command 或DataAdapter对象来执行SQL语句,并将执行的结果返回给DataReader 或 DataAdapter ,然后再使用取得的DataReader 或DataAdapter 对象操作数据结果。
62.如何C#理解委托
- (1).委托可以理解为持有一个或多个方法的对象。如果执行委托的话,委托会执行它所"持有"的方法。委托可以避免程序中大量使用if-else语句,使程序拥有更好的扩展性。
- (2).委托和类一样,是一种用户自定义的类型,但类表示的是数据和方法的集合,而委托则持有一个或多个方法,以及一系列预定义的操作。
- (3).delegate void MyDel(int x),delegate 作为委托关键字,没有方法主体
- (4)。多播委托可以把多个方法赋值给同一个委托,或者将多个方法绑定到同一个委托,就是多播委托。
63.如何理解.Net中的垃圾回收机制?
- .NETFramework 的垃圾回收器管理应用程序的内存分配和释放。
- 每次您使用 new 运算符创建对象时,运行库都从托管堆为该对象分配内存。
- 只要托管堆中有地址空间可用,运行库就会继续为新对象分配空间。
- 但是,内存不是无限大的。最终,垃圾回收器必须执行回收以释放一些内存。
- 垃圾回收器优化引擎根据正在进行的分配情况确定执行回收的最佳时间。
- 当垃圾回收器执行回收时,它检查托管堆中不再被应用程序使用的对象并执行必要的操作来回收它们占用的内存。