习题附答案.doc
《习题附答案.doc》由会员分享,可在线阅读,更多相关《习题附答案.doc(9页珍藏版)》请在冰点文库上搜索。
1、简要回答下列问题。
(1)举例说明new关键字可用于哪些方面?
(2)sealed关键字的作用是什么?
什么情况下需要使用sealed关键字?
(3)哪些关键字可以用于版本控制?
【解答】
1)在C#中,new关键字可用作运算符或修饰符。
作为运算符用于在堆上创建对象和调用构造函数。
作为修饰符用于隐藏基类成员的继承成员。
2)在类声明中使用sealed修饰符可防止其它类继承此类。
在方法声明中使用sealed修饰符可防止扩充类重写此方法。
sealed修饰符主要用于防止非有意的派生,但是它还能促使某些运行时优化。
具体说来,由于密封类永远不会有任何派生类,所以对密封类的实例的虚拟函数成员的调用可以转换为非虚拟调用来处理。
3)override关键字和new关键字均可用于版本控制。
在C#中,默认情况下方法不是虚拟的。
若要使方法成为虚拟方法,必须在基类的方法声明中使用virtual修饰符。
然后,派生类可以使用override关键字重写基类中的虚拟方法,或使用new关键字隐藏基类中的虚拟方法。
如果override关键字和new关键字均未指定,编译器将发出警告,并且派生类中的方法将隐藏基类中的方法。
2、简要回答抽象类和接口的主要区别。
【解答】
抽象类和接口的一个主要差别是:
类可以实现多个接口,但仅能从一个抽象类或任何其它类型的类继承。
3、编写一个控制台应用程序,完成下列功能,并回答提出的问题。
(1)创建一个类A,在构造函数中输出“A”,再创建一个类B,在构造函数中输出“B”。
(2)从A继承一个名为C的新类,并在C内创建一个成员B。
不要为C创建构造函数。
(3)在Main方法中创建类C的一个对象,写出运行程序后输出的结果。
(4)如果在C中也创建一个构造函数输出“C”,整个程序运行的结果又是什么?
【解答】
usingSystem;
publicclassA
{
publicA()
{
Console.WriteLine("A");
}
}
publicclassB
{
publicB()
{
Console.WriteLine("B");
}
}
publicclassC:
A
{
Bnewb=newB();
}
classMainClass
{
publicstaticvoidMain()
{
Cnewc=newC();
Console.ReadLine();
}
}
输出结果:
B
A
如果在C中也创建一个构造函数输出“C”,即添加:
publicC()
{
Console.WriteLine("C");
}
则整个程序运行的结果为:
B
A
C
4、编写一个控制台应用程序,完成下列功能,并写出运行程序后输出的结果。
(1)创建一个类A,在A中编写一个可以被重写的带int类型参数的方法MyMethod,并在该方法中输出传递的整型值加10后的结果。
(2)再创建一个类B,使其继承自类A,然后重写A中的MyMethod方法,将A中接收的整型值加50,并输出结果。
(3)在Main方法中分别创建类A和类B的对象,并分别调用MyMethod方法。
【解答】
usingSystem;
publicclassA
{
publicvirtualvoidMyMethod(intnum)
{
num+=10;
Console.WriteLine(num);
}
}
publicclassB:
A
{
publicoverridevoidMyMethod(intnum)
{
num+=50;
Console.WriteLine(num);
}
}
classMainClass
{
publicstaticvoidMain()
{
Anewa=newA();
newa.MyMethod
(2);
Bnewb=newB();
newb.MyMethod
(2);
Console.ReadLine();
}
}
输出结果:
12
52
5、假设Node类的每一个节点包括有两个字段:
m_data(引用节点的数据)和m_next(引用链接列表中的下一项)。
这两个字段都是由构造函数方法设置的。
该类有两个功能,第一个功能是通过名为Data和Next的只读属性访问m_data和m_next字段。
第二个功能是对System.Object的ToString虚拟方法进行重写。
试分别用类和泛型两种方法编写程序实现上述功能。
【解答】
usingSystem;
classNode
{
Objectm_data;
Nodem_next;
publicNode(Objectdata,Nodenext)
{
m_data=data;
m_next=next;
}
//访问结点数据
publicObjectData
{
get{returnm_data;}
}
//访问下一个结点
publicNodeNext
{
get{returnm_next;}
}
//获取结点数据描述
publicoverrideStringToString()
{
returnm_data.ToString();
}
}
//链表结点类的泛型定义
classNode
{
Tm_data;
Nodem_next;
publicNode(Tdata,Nodenext)
{
m_data=data;
m_next=next;
}
//访问结点数据
publicTData
{
get{returnm_data;}
set{m_data=value;}
}
//访问下一个结点
publicNodeNext
{
get{returnm_next;}
set{m_next=value;}
}
//获取结点数据描述
publicoverrideStringToString()
{
returnm_data.ToString();
}
}
//使用结点类型或泛型结点类型
classLinkedList
{
staticvoidMain(string[]args)
{
////创建整数链表
//Nodehead=newNode(5,null);
//head=newNode(10,head);
//head=newNode(15,head);
////遍历链表求整数和
//Int32sum=0;
//for(Nodecurrent=head;current!
=null;
//current=current.Next)
//{
//sum+=(Int32)current.Data;
//}
////输出结果
//Console.WriteLine("Sumofnodes={0}",sum);
//用泛型创建整数链表
Nodehead=newNode(5,null);
head=newNode(10,head);
head=newNode(15,head);
//遍历求和
Int32sum=0;
for(Nodecurrent=head;current!
=null;
current=current.Next)
{
sum+=current.Data;
}
//输出
Console.WriteLine("Sumofnodes={0}",sum.ToString());
}
}
1、使用保持连接方式编写程序,计算各年级平均成绩,并显示结果。
【解答】
usingSystem;
usingSystem.Collections.Generic;
usingSystem.ComponentModel;
usingSystem.Data;
usingSystem.Drawing;
usingSystem.Text;
usingSystem.Windows.Forms;
usingSystem.Data.SqlClient;
namespace习题9_1
{
publicpartialclassForm1:
Form
{
publicForm1()
{
InitializeComponent();
}
//添加Button按钮在ListBox中显示结果
privatevoidbutton1_Click(objectsender,EventArgse)
{
listBox1.Items.Add("年级平均成绩");
stringconnectionString=Properties.Settings.Default.MyDatabaseConnectionString;
//根据连接字符串创建SqlConnection实例
SqlConnectionconn=newSqlConnection(connectionString);
//创建SqlCommand实例,并设置SQL语句和使用的连接实例
SqlCommandcmd=newSqlCommand();
cmd.CommandText="selectsubstring(学号,1,2)as年级,avg(成绩)as平均成绩fromMyTable2groupbysubstring(学号,1,2)";
cmd.Connection=conn;
try
{
conn.Open();
SqlDataReaderr=cmd.ExecuteReader();
while(r.Read()==true)
{
listBox1.Items.Add(string.Format("{0}级{1}",r[0],r[1]));
}
r.Close();
}
catch(Exceptionerr)
{
MessageBox.Show(err.Message,"计算成绩失败");
}
finally
{
conn.Close();
}
}
}
}
2、使用保持连接方式编写程序,查询MyTable2中不及格学生的学号、姓名、性别和成绩。
并将结果在ListBox中显示出来。
【解答】
usingSystem;
usingSystem.Collections.Generic;
usingSystem.ComponentModel;
usingSystem.Data;
usingSystem.Drawing;
usingSystem.Text;
usingSystem.Windows.Forms;
usingSystem.Data.SqlClient;
namespace习题9_2
{
publicpartialclassForm1:
Form
{
publicForm1()
{
InitializeComponent();
}
privatevoidbutton1_Click(objectsender,EventArgse)
{
listBox1.Items.Add("学号姓名性别成绩");
stringconnectionString=Properties.Settings.Default.MyDatabaseConnectionString;
//根据连接字符串创建SqlConnection实例
SqlConnectionconn=newSqlConnection(connectionString);
//创建SqlCommand实例,并设置SQL语句和使用的连接实例
SqlCommandcmd=newSqlCommand();
cmd.CommandText=
"Select学号,姓名,性别,成绩FromMyTable2Where(成绩<60)";
cmd.Connection=conn;
try
{
conn.Open();
SqlDataReaderr=cmd.ExecuteReader();
while(r.Read()==true)
{
listBox1.Items.Add(string.Format("{0}{1}{2}{3}",r[0],r[1],r[2],r[3]));
}
r.Close();
}
catch(Exceptionerr)
{
MessageBox.Show(err.Message,"查询成绩失败");
}
finally
{
conn.Close();
}
}
}
}
3、编写程序,以“[编码]名称”的样式在comboBox1中显示MyTable1的内容。
【解答】
usingSystem;
usingSystem.Collections.Generic;
usingSystem.ComponentModel;
usingSystem.Data;
usingSystem.Drawing;
usingSystem.Text;
usingSystem.Windows.Forms;
usingSystem.Data.SqlClient;
namespace习题9_3
{
publicpartialclassForm1:
Form
{
publicForm1()
{
InitializeComponent();
}
privatevoidForm1_Load(objectsender,EventArgse)
{
stringconnectionString=Properties.Settings.Default.MyDatabaseConnectionString;
//根据连接字符串创建SqlConnection实例
SqlConnectionconn=newSqlConnection(connectionString);
//创建SqlCommand实例,并设置SQL语句和使用的连接实例
SqlCommandcmd=newSqlCommand();
cmd.CommandText="Select*FromMyTable1";
cmd.Connection=conn;
try
{
conn.Open();
SqlDataReaderr=cmd.ExecuteReader();
while(r.Read()==true)
{
comboBox1.Items.Add(string.Format("[{0}]{1}",r[0],r[1]));
}
comboBox1.SelectedIndex=0;
r.Close();
}
catch(Exceptionerr)
{
MessageBox.Show(err.Message,"显示数据失败");
}
finally
{
conn.Close();
}
}
}
}
4、已知数据库MyDb.mdf中定义了一张person表,表中有一个“年龄”字段,编写存储过程并调用存储过程显示该数据表中年龄大于18的所有纪录。
【解答】
usingSystem;
usingSystem.Collections.Generic;
usingSystem.ComponentModel;
usingSystem.Data;
usingSystem.Drawing;
usingSystem.Text;
usingSystem.Windows.Forms;
usingSystem.Data.SqlClient;
namespace习题9_4
{
publicpartialclassForm1:
Form
{
publicForm1()
{
InitializeComponent();
}
privatevoidbutton1_Click(objectsender,EventArgse)
{
stringconnectionstring=Properties.Settings.Default.MyDatabaseConnectionString;
SqlConnectionconn=newSqlConnection(connectionstring);
try
{
conn.Open();
SqlDataAdapteradapter=newSqlDataAdapter(
"select性别frompersonwhere性别>18",conn);
DataSetdataset=newDataSet();
adapter.Fill(dataset,"person");
dataGridView1.DataSource=dataset.Tables["person"];
adapter.Dispose();
}
catch(Exceptionerr)
{
MessageBox.Show(err.Message);
}
finally
{
conn.Close();
}