C#实验三委托.docx
- 文档编号:28900856
- 上传时间:2023-07-20
- 格式:DOCX
- 页数:15
- 大小:101.98KB
C#实验三委托.docx
《C#实验三委托.docx》由会员分享,可在线阅读,更多相关《C#实验三委托.docx(15页珍藏版)》请在冰豆网上搜索。
C#实验三委托
实验报告
学院:
计算机与信息学院专业:
计算机科学与技术年级:
12级
姓名:
学号:
实验室号:
_计算机号:
实验日期:
2014年12月9日指导教师签字:
成绩:
报告退发(订正、重做)
实验三委托
一、实验目的:
1、理解委托的基本用法。
2、理解委托的通用编程的思想。
二、实验内容:
1、利用委托,实现为任何类型对象进行排序。
具体要求如下:
(1)实现冒泡、选择和插入排序算法;
(2)定义Car类,包含两个字段:
name和price;(3)在Main方法中,分别调用冒泡、选择和排序算法,实现对Car对象根据姓名和价格排序。
2、利用委托,实现一个客户端、服务器简单聊天程序。
参考实验步骤:
(1)创建存储消息的类,类名为MsgPackage。
(2)创建基于委托的聊天服务器类,类名为DchatServer。
1)声明一个委托,当聊天消息到达时,委托将调用在客户端的回调函数。
2)定义一个字段,存储已连接客户端的委托
3)定义连接客户端和服务器的方法
4)定义断开客户端与服务器的方法
5)定义一个发送指定消息给所有已连接的客户端的方法
A将方法命名为SendMsg
B声明为publicstatic无返回类型
C两个参数:
一个MsgPackage类型的消息,一个object类型的参数表示被排
除的客户端。
D具体实现:
如果被排除客户参数是null,那么将调用多播委托给所有的客户端发送消息;如果被排除的客户端参数不是null,那么给被排除客户端之外的其他客户端发送信息。
(3)创建基于委托的客户端类,类名为DchatClient。
1)添加一个String类型的属性ClientName,代表客户端名字。
2)添加一个构造方法,参数为客户端名。
具体实现:
客户端名存储在ClientName属性;通过调用服务器的ClientConnect方法将客户端链接到服务器上。
3)定义Show方法。
当服务器接收到聊天信息时,将通过委托调用该方法。
(4)创建基于委托的聊天应用代码。
1)在Program类(默认),创建一个名为DelegateChatServerDemo的静态方法。
2)向控制台输出一行文本,显示程序开始。
3)实例化3个DChatClient对象,将客户端名“张三”、“李四”、“王五”传递给构
造函数。
4)调用DChatServer的静态方法SendMsg向服务器发送消息。
该消息由“张三”发
送给所有的客户端。
5)调用DChatServer的静态方法SendMsg向服务器发送消息。
该消息由“李四”发
送给所有的客户端。
6)调用DChatServer的静态方法SendMsg向服务器发送消息。
该消息由“王五”发
送给所有的客户端。
7)“张三”发送消息给除客户端“王五”以外的所有客户端。
8)“王五”与服务器断开连接。
9)“张三”发送消息给所有的客户端。
10)向控制台上发送一行文本,显示程序结束。
11)在Main函数中调用DelegateChatServerDemo。
三、实验环境
VS2008
四、实验步骤
*项目结构如下:
1.利用委托,实现为任何类型对象进行排序。
(1)在命名空间SortDelegate下声明一个委托
publicdelegateboolSortDelegate(Objectobj1,Objectobj2);
(2)创建排序类,类名为Sort。
1)定义一个采用冒泡排序的静态方法,方法名为BubbleSort
2)定义一个采用选择排序的静态方法,方法名为SelectSort
3)定义一个采用插入排序的静态方法,方法名为InsertionSort
(3)创建一个汽车类,名为Car。
1)定义两个字段,存储汽车的车名和价格
privatestringname;
privatedecimalprice;
2)定义两个属性,对两个字段进行读取操作
3)定义一个构造方法
publicCar(stringname,decimalprice)
{
this.Name=name;
this.Price=price;
}
4)定义一个根据车名比较汽车的方法
//根据Name属性比较
publicstaticboolCompareByName(Objectobj1,Objectobj2)
{
return((Car)obj1).Name.CompareTo(((Car)obj2).Name)>0;
}
5)定义一个根据价格比较汽车的方法
//根据Price属性比较
publicstaticboolCompareByPrice(Objectobj1,Objectobj2)
{
return((Car)obj1).Price>((Car)obj2).Price;
}
6)重写ToString()方法
publicoverridestringToString()
{
returnName+"的价格是"+Price+"万";
}
(4)定义一个测试类,类名为Program
在主方法中写如下测试代码:
publicstaticvoidMain(string[]args)
{
//SortDelegatesortDelegate=Car.CompareByName;
Car[]c=newCar[]{newCar("Volkswagen",15m),newCar("Benz",50m),newCar("BMW",70m),newCar("Buick",35m)};
Console.WriteLine("用冒泡排序根据车名排序:
");
Sort.BubbleSort(c,Car.CompareByName);
foreach(Cartempinc)
{
Console.WriteLine(temp);
}
Console.WriteLine();
Console.WriteLine("用冒泡排序根据价格排序:
");
Sort.BubbleSort(c,Car.CompareByPrice);
foreach(Cartempinc)
{
Console.WriteLine(temp);
}
Console.WriteLine();
Console.WriteLine("用选择排序根据车名排序:
");
Sort.SelectSort(c,Car.CompareByName);
foreach(Cartempinc)
{
Console.WriteLine(temp);
}
Console.WriteLine();
Console.WriteLine("用选择排序根据价格排序:
");
Sort.SelectSort(c,Car.CompareByPrice);
foreach(Cartempinc)
{
Console.WriteLine(temp);
}
Console.WriteLine();
Console.WriteLine("用插入排序根据车名排序:
");
Sort.InsertionSort(c,Car.CompareByName);
foreach(Cartempinc)
{
Console.WriteLine(temp);
}
Console.WriteLine();
Console.WriteLine("用插入排序根据价格排序:
");
Sort.InsertionSort(c,Car.CompareByPrice);
foreach(Cartempinc)
{
Console.WriteLine(temp);
}
Console.WriteLine();
Console.ReadKey();
}
五、实验调试与结果分析
1.一开始将委托SortDelegate创建在排序类Sort中
在测试类中
错误提示为:
解决方法有两种:
(1)在测试类中不直接使用SortDelegate类,直接写入调用方法
Sort.BubbleSort(c,Car.CompareByName);
(2)将委托SortDelegate定义在与其他类同一个命名空间下
2.错误结果:
经过调试,发现错误在于
应改为
if(value!
=null&&!
"".Equals(value))
正确结果如下:
实验2.结果为:
六、总结
逻辑判断中容易出错,要多留意,委托要创建在要使用到的类的同个命名空间内,避免出错。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C# 实验 委托
![提示](https://static.bdocx.com/images/bang_tan.gif)