C#笔试题目总结

1 、
● 封装:用抽象的数据类型将数据和基于数据的操作封装在一起,数据被保护在抽象数据类型内部。
● 继承:子类拥有父类的所有数据和操作。
● 多态:一个程序中同名的不同方法共存的情况。有两种形式的多态– 重载与重写。
2、什么是ASP.net中的用户控件
用户控件就是.ascx扩展名的东西,可以拖到不同的页面中调用,以节省代码.比如登陆可能在多个页面上有,就可以做成用户控件,但是有一个问题就是用户控件拖到不同级别的目录下后里面的图片等的相对路径会变得不准确,需要自已写方法调整.
3 new 关键字用法
(1)new 运算符:用于创建对象和调用构造函数。
(2)new 修饰符:用于向基类成员隐藏继承成员。
(3)new 约束:用于在泛型声明中约束可能用作类型参数的参数的类型。
4 如何把一个 Array 复制到 ArrayList
(1) 实现 1
string[] s ={ "111", "22222" };
ArrayList list = new ArrayList();
list.AddRange(s);
(2) 实现 2
string[] s ={ "111", "22222" };
ArrayList list = new ArrayList(s);
5 DataGrid Datasouse 可以连接什么数据源
l         DataTable
l         DataView
l         DataSet
l         DataViewManager
l         任何实现 IListSource 接口的组件
l         任何实现 IList 接口的组件
6 概述反射和序列化
反射:公共语言运行库( CLR )加载器管理应用程序域。这种管理包括将每个程序集加载到相应的应用程序域以及控制每个程序集中类型层次结构的内存布局。
程序集包含模块,而模块包含类型,类型又包含成员。反射则提供了封装程序集、模块和类型的对象。您可以使用反射动态地创建类型的实例,将类型绑定到现有对象,或从现有对象中获取类型。然后,可以调用类型的方法或访问其字段和属性。
序列化:序列化是将对象状态转换为可保持或传输的格式的过程。与序列化相对的是反序列化,它将流转换为对象。这两个过程结合起来,可以轻松地存储和传输数据。
7 概述 O/R Mapping 的原理
利用反射,配置将对象和数据库表映射。
8 可访问性级别有哪几种
l         public 访问不受限制。
l         protected 访问仅限于包含类或从包含类派生的类型。
l         internal 访问仅限于当前程序集。
l         protected internal 访问仅限于从包含类派生的当前程序集或类型。
l         private 访问仅限于包含类型。
9 sealed 修饰符有什么特点
sealed 修饰符可以应用于类、实例方法和属性。密封类不能被继承。密封方法会重写基类中的方法,但其本身不能在任何派生类中进一步重写。当应用于方法或属性时, sealed 修饰符必须始终与 override 一起使用。
10 、列举 ADO.NET 中的共享类和数据库特定类
共享类: DataSet DataTable DataRow DataColumn DataRelation Constraint
DataColumnMapping DataTableMapping
特定类: (x)Connection (x)Command (x)CommandBuilder (x)DataAdapter
(x)DataReader (x)Parameter (x)Transaction
11 、执行下面代码后:
String strTemp ="abcdefg 某某某 "
Int i=System.Text.Encoding.Default.GetBytes(strTemp).Length;
Int j=strTemp.Length;
问: i=? j=? 
i=(14 ) j=(11 ) (中文两个字节,包括空格)
12 C# 中, string str = null string str ="" ,请尽量用文字说明区别。
string str ="" 初始化对象分配空间,而 string str=null 初始化对象
13 、详述 .NET class struct 的异同
结构与类共享几乎所有相同的语法,但结构比类受到的限制更多:尽管结构的静态字段可以初始化,结构实例字段声明还是不能使用初始值设定项。
结构不能声明默认构造函数(没有参数的构造函数)或析构函数。
结构的副本由编译器自动创建和销毁,因此不需要使用默认构造函数和析构函数。实际上,编译器通过为所有字段赋予默认值(参见默认值表)来实现默认构造函数。结构不能从类或其他结构继承。
结构是值类型 -- 如果从结构创建一个对象并将该对象赋给某个变量,变量则包含结构的全部值。复制包含结构的变量时,将复制所有数据,对新副本所做的任何修改都不会改变旧副本的数据。由于结构不使用引用,因此结构没有标识 -- 具有相同数据的两个值类型实例是无法区分的。 C# 中的所有值类型本质上都继承自 ValueType ,后者继承自 Object
编译器可以在一个称为装箱的过程中将值类型转换为引用类型。
结构具有以下特点:
l         结构是值类型,而类是引用类型。
l         向方法传递结构时,结构是通过传值方式传递的,而不是作为引用传递的。
l         与类不同,结构的实例化可以不使用 new 运算符。
l         结构可以声明构造函数,但它们必须带参数。
l         一个结构不能从另一个结构或类继承,而且不能作为一个类的基。所有结构都直接继承自 System.ValueType ,后者继承自 System.Object
l         结构可以实现接口。
l         在结构中初始化实例字段是错误的。
14、什么叫应用程序域?什么是受管制的代码?什么是托管代码?什么是强类型系统?什么是装箱和拆箱?什么是重载?CTS、CLS和CLR分别作何解释?
应用程序域为安全性、可靠性、版本控制以及卸载程序集提供了隔离边界。应用程序域通常由运行库宿主创建,运行库宿主负责在运行应用程序之前引导公共语言运行库。应用程序域提供了一个更安全、用途更广的处理单元,公共语言运行库可使用该单元提供应用程序之间的隔离。
受管制的代码:在 .Net 环境中运行的任何代码都是受管制的代码( managed code ), .Net 外部的代码也运行在 windows 上,这些代码称为未受管制的代码( unmanaged code )。
使用基于公共语言运行库的语言编译器开发的代码称为托管代码;托管代码具有许多优点,例如:跨语言集成、跨语言异常处理、增强的安全性、版本控制和部署支持、简化的组件交互模型、调试和分析服务等。
强类型语言是能够禁止任何违反类型系统的代码的语言,或者说是能够捕获所有违反类型系统的错误的语言。我们说 C++ 相对于 C 是强类型的,是因为 C++ 禁止了一些 C 中的隐式转换,比如将 void* 转换为任意的指针类型。
装箱和拆箱使值类型能够被视为对象。对值类型装箱将把该值类型打包到 Object 引用类型的一个实例中。这使得值类型可以存储于垃圾回收堆中。拆箱将从对象中提取值类型。
每个类型成员都有一个唯一的签名。方法签名由方法名称和一个参数列表(方法的参数的顺序和类型)组成。只要签名不同,就可以在一种类型内定义具有相同名称的多种方法。当定义两种或多种具有相同名称的方法时,就称作重载。
CTS 通用类型系统 (common type system)
一种确定公共语言运行库如何定义、使用和管理类型的规范。
CLR 公共语言运行库
.NET Framework 提供了一个称为公共语言运行库的运行时环境,它运行代码并提供使开发过程更轻松的服务。
CLS 公共语言规范
要和其他对象完全交互,而不管这些对象是以何种语言实现的,对象必须只向调用方公开那些它们必须与之互用的所有语言的通用功能。为此定义了公共语言规范 (CLS) ,它是许多应用程序所需的一套基本语言功能。
15、列举一下你所了解的XML技术及其应用
XML 代表Extensible Markup Language(eXtensible Markup Language的缩写,意为可扩展的标记语言)。XML是一套定义语义标记的规则,这些标记将文档分成许多部件并对这些部件加以标识。它也是元标记语言,即定义了用于定义其他与特定领域有关的、语义的、结构化的标记语言的句法语言。
通过XML,你可以在HTML文件之外存储数据;可以在不兼容的系统之间交换数据;可以在网络中交换金融信息;纯文本文件可以用来共享数据;纯文本文件可以用来存储数据;你的数据可以被更多的用户使用;可以用于创建新的语言。
16、值类型和引用类型的区别?写出C#的样例代码。
基于值类型的变量直接包含值。将一个值类型变量赋给另一个值类型变量时,将复制包含的值。这与引用类型变量的赋值不同,引用类型变量的赋值只复制对对象的引用,而不复制对象本身。
所有的值类型均隐式派生自 System.ValueType
与引用类型不同,从值类型不可能派生出新的类型。但与引用类型相同的是,结构也可以实现接口。
与引用类型不同,值类型不可能包含 null 值。然而,可空类型功能允许将 null 赋给值类型。
每种值类型均有一个隐式的默认构造函数来初始化该类型的默认值。
值类型主要由两类组成:结构、枚举
结构分为以下几类: Numeric (数值)类型、整型、浮点型、 decimal bool 、用户定义的结构。
引用类型的变量又称为对象,可存储对实际数据的引用。声明引用类型的关键字: class interface delegate 、内置引用类型: object string
     例: StringBuilder a=new StringBuilder();//将StringBuilder的一个首地址传给 a
                                     StringBuilder b=a;//将StringBuilder的一个首地址传给
b
                                      b.Append("mxh");
                                      Console.WriteLine(a);
                                       a=null;
                                       Console.WriteLine(b);
               输出结果:
mxh
                                   mxh
       "a=null"的意思是:a的引用置为空但此时StringBuilder的堆空间并没有被释放,因此在此之后,输出b时,仍然可以输出mxh
17、ADO.net中常用的对象有哪些?分别描述一下。
ADO.NET 对象模型中有 5 个主要的数据库访问和操作对象,分别是 Connection Command DataReader DataAdapter DataSet 对象。
其中, Connection 对象主要负责连接数据库, Command 对象主要负责生成并执行 SQL 语句, DataReader 对象主要负责读取数据库中的数据, DataAdapter 对象主要负责在 Command 对象执行完 SQL 语句后生成并填充 DataSet DataTable ,而 DataSet 对象主要负责存取和更新数据。
18、如何理解委托?
委托具有以下特点:委托类似于 C++ 函数指针,但它是类型安全的。委托允许将方法作为参数进行传递。委托可用于定义回调方法。委托可以链接在一起;例如,可以对一个事件调用多个方法。方法不需要与委托签名精确匹配。
19、C#中的接口和类有什么异同。
异:
不能直接实例化接口。
接口不包含方法的实现。
接口、类和结构可从多个接口继承。但是 C# 只支持单继承:类只能从一个基类继承实现。
类定义可在不同的源文件之间进行拆分。
 
1. 一列数的规则如下: 1、1、2、3、5、8、13、21、34...... 求第30位数是多少, 用递归算法实现。 答:public class MainClass { public static void Main() { Console.WriteLine(Foo(30)); } public static int Foo(int i) { if (i <= 0) return 0; else if(i > 0 && i <= 2) return 1; else return Foo(i -1) + Foo(i - 2); } } 2.C#中的委托是什么?事件是不是一种委托? 答 :委托可以把一个方法作为参数代入另一个方法。 委托可以理解为指向一个函数的引用。 是,是一种特殊的委托。 3.override与重载的区别 答 :overrider与重载的区别。重载是方法的名称相同。参数或参数类型不同,进行多次重载以适应不同的需要。 Overrider是进行基类中函数的重写。为了适应需要。 4.如果在一个B/S结构的系统中需要传递变量值,但是又不能使用Session、Cookie、Application,您有几种方法进行处理? 答 : this.Server.Transfer 5.请编程遍历页面上所有TextBox控件并给它赋值为string.Empty? 答: foreach (System.Windows.Forms.Control control in this.Controls) { if (control is System.Windows.Forms.TextBox) { System.Windows.Forms.TextBox tb = (System.Windows.Forms.TextBox)control ; tb.Text = String.Empty ; } } 6.请编程实现一个冒泡排序算法? 答: int [] array = new int[] {1,3,5,8,0,2,3,10,8,10}; int temp = 0 ; for (int i = 0 ; i < array.Length - 1 ; i++) { for (int j = i + 1 ; j < array.Length ; j++) { if (array[j] < array[i]) { temp = array[i] ; array[i] = array[j] ; array[j] = temp ; } } }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值