C#面试学习期未考试基础练习题带答案100题第4套.docx
《C#面试学习期未考试基础练习题带答案100题第4套.docx》由会员分享,可在线阅读,更多相关《C#面试学习期未考试基础练习题带答案100题第4套.docx(63页珍藏版)》请在冰豆网上搜索。
C#面试学习期未考试基础练习题带答案100题第4套
C#_面试_学习_期未考试_基础练习题_带答案_100题_2021第4套
[单选题]
1.在类的成员中,用于存储属性值的是()
A)属性
B)方法
C)事件
D)成员变量
答案:
D
解析:
成员的属性值存储于成员变量中。
2.类的以下特征中,可以用于方便地重用已有的代码和数据的是()
A)多态
B)封装
C)继承
D)抽象
答案:
C
解析:
继承是在类之间建立一种相交的关系,使得新定义的派生类的实例可以继承已有的基类的特征并且还可以添加新的功能。
3.下面关于抽象类的说法正确的是?
()
A)抽象类只能做子类
B)抽象类可以被实例化
C)抽象类不能被实例化
D)一个抽象类只能有一个子类
答案:
C
解析:
抽象类不能被实例化,抽象类只能被继承实现。
4.在C#中,以下操作可以在窗体标题栏中显示帮助按钮的是()。
A)设置HelpButton为true
B)设置HelpButton为true,MaximizeBox为false
C)设置HelpButton为true,MinimizeBox为false
D)设置HelpButton为true,MaximizeBox为false,MinimizeBox为false
答案:
D
解析:
5.假定一个10行20列的二维整型数组,下列哪个定义语句是正确的()。
A)int[]arr=newint[10,20]
B)int[]arr=intnew[10,20]
C)int[,]arr=newint[10,20]
D)int[,]arr=newint[20;10]
答案:
C
解析:
newint[10,20],前面是行,后面是列。
6.在WinForm窗体中,放置了一个PictureBox控件PictureBox1,在设置PictureBox1控件的Image属性后,当图片与控件的大小不一致时,可以通过如下代码()使PictureBox1控件的大小与图片大小保持一致。
(选择一项)
A)this.PictureBox1.SizeMode=PictureBoxSizeMode.AutoSize;
B)this.PictureBox1.SizeMode=PictureBoxSizeMode.Normal;
C)this.PictureBox1.SizeMode=PictureBoxSizeMode.StretchImage;
D)this.PictureBox1.SizeMode=PictureBoxSizeMode.CenterImage;
答案:
A
解析:
7.枚举类型是一组命名的常量集合,所有整形都可以作为枚举类型的基本类型,如果类型省略,则定义为()。
A)uint
B)sbyte
C)ulong
D)int
答案:
D
解析:
8.设计窗口,可以通过()属性向列表框控件如ListBox的列表添加项。
A)Items
B)Items.Count
C)Text
D)SelectedIndex
答案:
A
解析:
9.值类型变量不包含下列()
A)整数类型
B)浮点类型
C)引用类型
D)浮点类型
答案:
C
解析:
C#的值类型包括:
结构体(数值类型,bool型,用户定义的结构体),枚举,可空类型。
C#的引用类型包括:
数组,用户定义的类、接口、委托,object,字符串。
数组的元素,不管是引用类型还是值类型,都存储在托管堆上。
引用类型在栈中存储一个引用,其实际的存储位置位于托管堆。
为了方便,本文简称引用类型部署在托管推上。
值类型总是分配在它声明的地方:
作为字段时,跟随其所属的变量(实例)存储;作为局部变量时,存储在栈上。
值类型在内存管理方面具有更好的效率,并且不支持多态,适合用作存储数据的载体;引用类型支持多态,适合用于定义应用程序的行为。
10.在.NET中,()类提供了操作字符串的方法。
A)System.Threading
B)System.IO
C)System.Collections
D)System.String
答案:
D
解析:
11.看代码回答问题
建表如下:
createtablestuInfo
(
stuIdintnotnull,
stuNamevarchar(30)notnull,
stuAddressvarchar(30),
)
看下面C#代码填空,要读取表中的第一列数据(已知sqlCmd为SqlCommand对象,sqlReader为SqlDataReader对象):
While(sqlReader.________)
{
Console.writeLine(sqlReader._________);
}选择()
A)Read()GetInt(0)
B)Next()GetValue(0)
C)Read()GetValue
(1)
D)Read()GetValue(0)
答案:
D
解析:
DataReader对象提供了顺序的,只读的方式读取Command对象获得的数据结果集。
正是因为DataReader是以顺序的方式连续地读取数据,所以DataReader会以独占的方式打开数据库连接。
由于DataReader只执行读操作,并且每次只在内存缓冲区里存储结果集的一条数据,所以使用Datareader对象的效率比较高,如果要查询大量数据,同事不需要随机访问和修改数据,DataReader是优先的选择。
DataReader对象有许多的属性和方法:
12.以下哪些功能不属于C#2.0新增的特性()
A)继承和多态
B)泛型
C)可空类型
D)遍历器
答案:
A
解析:
继承和多态是面向对象的基本特征,不是新特性。
13.C#中声明一个命名空间的关键字是()。
A)namespace
B)nameplace
C)this
D)as
答案:
A
解析:
namespace定义命名空间。
14.()关键字可以用来访问当前对象的基类对象。
A)object
B)this
C)as
D)base
答案:
D
解析:
使用base.调用父类里面的属性
publicclassparent
{
publicstringa;
}
publicclasschild:
parent
{
publicstringgetparent()
{
returnbase.a;
}
}
15.分析下列C#语句,注意类MyClass没有访问修饰符:
namespaceClassLibrary1{
classMyClass{
publicclasssubClass{
inti;}}}
若必须为类MyClass添加访问修饰符,并使MyClass的可访问域保持不变,则应选择
________。
A)private
B)protected
C)internal
D)public
答案:
C
解析:
16.在C#中执行以下代码结果是()。
ArrayListlist=newArrayList();
list.Add
(1);1
list.Add(“2”);
list.Add(“3”);
list.RemoveAt(0);2
list.RemoveAt
(1);
list.RemoveAt
(2);3
A)正确执行
B)代码行1运行出错
C)代码行2运行出错
D)代码行3运行出错
答案:
D
解析:
第3行出错。
因为前面已经移出两个,list.RemoveAt
(2);超出范围。
17.若将数据集中所作更改更新回数据库,应调用SqlAdapter的()方法。
A)Update
B)Close
C)Fill
D)Open
答案:
A
解析:
SqlDataAdapter概述
SqlDataAdapter是DataSet和SQLServer之间的桥接器,用于检索和保存数据。
SqlDataAdapter通过对数据源使用适当的Transact-SQL语句映射Fill(它可更改DataSet中的数据以匹配数据源中的数据)和Update(它可更改数据源中的数据以匹配DataSet中的数据)来提供这一桥接。
当SqlDataAdapter填充DataSet时,它为返回的数据创建必需的表和列(如果这些表和列尚不存在)。
)我们可以通过以下三种方法来创建SqlDataAdapter对象:
使用方法
1、通过连接字符串和查询语句
[csharp]viewplaincopy
在CODE上查看代码片派生到我的代码片
stringstrConn="uid=账号;pwd=密码;database=数据库;server=服务器";//SQLServer链接字符串
strSql="SELECT*FROM表名";
SqlDataAdapterda=newSqlDataAdapter(strSql,strConn);
DataSetds=newDataSet();//创建DataSet实例
da.Fill(ds,"自定义虚拟表名");//使用DataAdapter的Fill方法(填充),调用SELECT命令
这种方法有一个潜在的缺陷。
假设应用程序中需要多个SqlDataAdapter对象,用这种方式来创建的话,会导致创建每个SqlDataAdapter时,都同时创建一个新的SqlConnection对象,方法二可以解决这个问题
2、通过查询语句和SqlConnection对象来创建
[csharp]viewplaincopy
在CODE上查看代码片派生到我的代码片
stringstrConn="uid=账号;pwd=密码;database=数据库;server=服务器";//SQLServer链接字符串
SqlConnectionconn=newSqlConnection(strConn);
stringstrSql="SELECT*FROM表名";
SqlDataAdapterda=newSqlDataAdapter(strSql,conn);
DataSetds=newDataSet();//创建DataSet实例
da.Fill(ds,"自定义虚拟表名");//使用DataAdapter的Fill方法(填充),调用SELECT命令
3、通过SqlCommand对象来创建
[csharp]viewplaincopy
在CODE上查看代码片派生到我的代码片
stringstrConn="uid=账号;pwd=密码;database=数据库;server=服务器";//SQLServer链接字符串
SqlConnectionconnSql=newSqlConnection(strConn);//Sql链接类的实例化
connSql.Open();//打开数据库
//使用SqlDataAdapter时没有必要从Connection.open()打开,
//SqlDataAdapter会自动打开关闭它。
stringstrSql="SELECT*FROM表名";//要执行的SQL语句
SqlCommandcmd=newSqlCommand(strSql,connsql);
SqlDataAdapterda=newSqlDataAdapter(cmd);//创建DataAdapter数据适配器实例
DataSetds=newDataSet();//创建DataSet实例
da.Fill(ds,"自定义虚拟表名");//使用DataAdapter的Fill方法(填充),调用SELECT命令
ConnSql.Close();//关闭数据库
SqlDataAdapterda=newSqlDataAdapter(strSQL,ConnSql);//创建DataAdapter数据适配器实例DataSetds=newDataSet();//创建DataSet实例da.Fill(ds,"自定义虚拟表名");//使用DataAdapter的Fill方法(填充),调用SELECT命令ConnSql.Close();//关闭数据库
注意
如果只需要执行SQL语句或SP,就没必要用到DataAdapter,直接用SqlCommand的Execute系列方法就可以了。
sqlDataadapter的作用是实现Dataset和DB之间的桥梁:
比如将对DataSet的修改更新到数据库。
SqlDataAdapter的UpdateCommand的执行机制是:
当调用SqlDataAdapter.Update()时,检查DataSet中的所有行,然后对每一个修改过的Row执行SqlDataAdapter.UpdateCommand,也就是说如果未修改DataSet中的数据,SqlDataAdapter.UpdateCommand不会执行。
使用要点
1、SqlDataAdapter内部通过SqlDataReader获取数据,而默认情况下SqlDataReader不能获知其查询语句对应的数据库表名,
所以下面的代码:
[csharp]viewplaincopy
在CODE上查看代码片派生到我的代码片
stringstrConn="uid=账号;pwd=密码;database=数据库;server=服务器";//SQLServer链接字符串
strSql="SELECT*FROM表名";
SqlDataAdapterda=newSqlDataAdapter(strSql,strConn);
DataSetds=newDataSet();
da.Fill(ds);
会在DataSet中创建一个新的DataTable,这个新的DataTable会拥有名为CustomerID和CompanyName列,但是DataTable对象的名称是Table,而不是我们希望的Customers。
这个问题,可以通过添加TableMapping来解决:
[csharp]viewplaincopy
在CODE上查看代码片派生到我的代码片
stringstrConn="uid=账号;pwd=密码;database=数据库;server=服务器";//SQLServer链接字符串
strSql="SELECT*FROM表名";
SqlDataAdapterda=newSqlDataAdapter(strSQL,strConn);
da.TableMappings.Add("Table","Customers");//设置对象名称
DataSetds=newDataSet();
da.Fill(ds);
其实最简洁的方法是通过使用Fill方法的重载,通过指定DataTable,像这样:
SqlDataAdapter.Fill(DataSet,"MyTableName");
这样就可以不必使用TableMappings集合。
2、在使用Fill方式时,可以指定DataTable,而不是DataSet:
[csharp]viewplaincopy
在CODE上查看代码片派生到我的代码片
stringstrConn="uid=账号;pwd=密码;database=数据库;server=服务器";//SQLServer链接字符串
strSql="SELECT*FROM表名";
SqlDataAdapterda=newSqlDataAdapter(strSql,strConn);
DataTabletbl=newDataTable();
da.Fill(tbl);
3、注意打开和关闭连接的处理
在调用SqlCommand对象执行sql命令之前,需要保证与该对象关联的SqlConnection对象时打开的,否则SqlCommand的方法执行时将引发一个异常,但是我们在上面的代码中看到,SqlDataAdapter没有这样的要求。
如果调用SqlDataAdapter的Fill方法,并且其SelectCommand属性的SqlConnection是关闭状态,则SqlDataAdapter会自动打开它,然后提交查询,获取结果,最后关闭连接。
如果在调用Fill方法前,SqlConnection是打开的,则查询执行完毕后,SqlConnection还将是打开的,也就是说SqlDataAdapter会保证SqlConnection的状态恢复到原来的情形。
这有时会导致性能问题,需要注意,例如下面的代码:
[csharp]viewplaincopy
在CODE上查看代码片派生到我的代码片
stringstrConn="uid=账号;pwd=密码;database=数据库;server=服务器";//SQLServer链接字符串
SqlConnectionconn=newSqlConnection(strConn);
SqlDataAdapterdaCustomers,daOrders;
strSql="SELECT*FROMCustomers";
daCustomers=newSqlDataAdapter(strSql,conn);
strSql="SELECT*FROMOrders";
daOrders=newSqlDataAdapter(strSql,conn);
DataSetds=newDataSet();
daCustomers.Fill(ds,"Customers");
daOrders.Fill(ds,"Orders");
以上代码会导致连接被打开和关闭两次,在调用Fill方法时各一次。
为了避免打开和关闭SqlConnection对象,在调用SqlDataAdapter对象的Fill方法之前,我们可以先打开SqlConnection对象,如果希望之后关闭连接,我们可以再调用Close方法,就像这样:
[csharp]viewplaincopy
在CODE上查看代码片派生到我的代码片
cn.Open();
daCustomers.Fill(ds,"Customers");
daOrders.Fill(ds,"Orders");
cn.Close();
4、多次调用Fill方法需要注意数据重复和有效更新数据的问题
[csharp]viewplaincopy
在CODE上查看代码片派生到我的代码片
stringstrConn="uid=账号;pwd=密码;database=数据库;server=服务器";//SQLServer链接字符串
strSql="SELECT*FROMCustomers";
SqlDataAdapterda=newSqlDataAdapter(strSql,strConn);
DataSetds=newDataSet();
da.Fill(ds,"Customers");
//…….
da.Fill(ds,"Customers");
18.关于base关键字,下列使用方法错误的是()。
A)在子类中,base可以调用父类的构造函数
B)在子类中,base关键字可以访问父类的公共属性
C)在子类中,base关键字不可以调用父类的protected成员
D)在子类中,base关键字不可以调用父类的private成员
答案:
C
解析:
protected子类可以调用。
19.以下数据类型不能表示负数范围的是()
A)sbyte
B)decimal
C)double
D)uint
答案:
D
解析:
20.以下数据类型中不可以使用算术运算的是()
A)bool
B)char
C)decimal
D)sbyte
答案:
A
解析:
bool只有逻辑计算,不能算述运算。
21.假定一个10行20列的二维整型数组,下列哪个定义语句是正确的()。
A)int[]arr=newint[10,20]
B)int[]arr=intnew[10,20]
C)int[,]arr=newint[10,20]
D)int[,]arr=newint[20;10]
答案:
C
解析:
int[,]arr=newint[10,20]定义二维数组
22.关于C#中的switchcase语句,以下说法正确的是()
A)switch判断的表达式可以是整型或者字符型,但不能是字符串型
B)在该语句中最多不能超过5个case子句
C)在该语句中只能有一个default子句
D)在该句中只能有一个break语句
答案:
C
解析:
switch可以有多个break.但是default只能一个。
23.若将数据库中的数据填充到数据集,应调用SqlDataAdapter的()方法。
A)Open
B)Close
C)Fill
D)Update
答案:
C
解析:
SqlDataAdapter概述
SqlDataAdapter是DataSet和SQLServer之间的桥接器,用于检索和保存数据。
SqlDataAdapter通过对数据源使用适当的Transact-SQL语句映射Fill(它可更改DataSet中的数据以匹配数据源中的数据)和Update(它可更改数据源中的数据以匹配DataSet中的数据)来提供这一桥接。
当SqlDataAdapter填充DataSet时,它为返回的数据创建必需的表和列(如果这些表和列尚不存在)。
)我们可以通过以下三种方法来创建SqlDataAdapter对象:
使用方法
1、通过连接字符串和查询语句
[csharp]viewplaincopy
在CODE上查看代码片派生到我的代码片
stringstrConn="uid=账号;pwd=密码;database=数据库;server=服务器";//SQLServer链接字符串
strSql="SELECT*FROM表名";
SqlDataAdapterda=newSqlDataAdapter(strSql,strConn);
DataSetds=newDataSet();//创建DataSet实例
da.Fill(ds,"自定义虚拟表名");//使用DataAdapter的Fill方法(填充),调用SELECT命令
这种方法有一个潜在的缺陷。
假设应用程序中需要多个SqlDataAdapter对象,用这种方式来创建的话,会导致创建每个SqlDataAdapt