1C#实验三(委托)

玛丽莲梦兔
687次浏览
2020年07月30日 08:35
最佳经验
本文由作者推荐

五年级上册语文期末试卷-通胀与通缩



学院:
姓名:
实验日期:
计算机与信息学院
学号:
验报告
年级:12级专业:计算机科学与技术
实验室号:_计算机号:
指导教 师签字:成绩:2014年12月9日
报告退发(订正、重做)
实验三
一、实验目的:
1、理解委托的基本用法。
2、理解委托的通用编程的思想。
委托
二、实验内 容:
1、利用委托,实现为任何类型对象进行排序。具体要求如下:(1)实现冒泡、选择和
插 入排序算法;(2)定义Car类,包含两个字段:name和price;(3)在Main方法中,分别调< br>用冒泡、选择和排序算法,实现对Car对象根据姓名和价格排序。
2、利用委托,实现一个客户 端、服务器简单聊天程序。
参考实验步骤:
(1)创建存储消息的类,类名为MsgPacka ge。
(2)创建基于委托的聊天服务器类,类名为DchatServer。
1)声明一个委 托,当聊天消息到达时,委托将调用在客户端的回调函数。
2)定义一个字段,存储已连接客户端的委托
3)定义连接客户端和服务器的方法


4)定义断开客户端与服务器的方法
5)定义一个发送指定消息给所有已连接的客户端的方法
A将方法命名为SendMsg
B声 明为publicstatic无返回类型
C两个参数:一个MsgPackage类型的消息,一个o bject类型的参数表示被排
除的客户端。
D具体实现:如果被排除客户参数是null,那 么将调用多播委托给所有的客
户端发送消息;如果被排除的客户端参数不是null,那么给被排除客户 端之外的其他
客户端发送信息。
(3)创建基于委托的客户端类,类名为DchatClien t。
1)添加一个String类型的属性ClientName,代表客户端名字。
2)添加 一个构造方法,参数为客户端名。
具体实现:客户端名存储在ClientName属性;通过调用服务 器的ClientConnect方法
将客户端链接到服务器上。
3)定义Show方法。当服 务器接收到聊天信息时,将通过委托调用该方法。


(4)创建基于委托的聊天应用代码。
1)在Program类(默认),创建一个名为DelegateChatServerDemo的静 态方法。
2)向控制台输出一行文本,显示程序开始。
3)实例化3个DChatClient 对象,将客户端名“张三”、“李四”、“王五”传递给构
造函数。
4)调用DChatSer ver的静态方法SendMsg向服务器发送消息。该消息由“张三”发
送给所有的客户端。
5)调用DChatServer的静态方法SendMsg向服务器发送消息。该消息由“李四”发
送 给所有的客户端。
6)调用DChatServer的静态方法SendMsg向服务器发送消息。该消 息由“王五”发
送给所有的客户端。
7)“张三”发送消息给除客户端“王五”以外的所有客户 端。
8)“王五”与服务器断开连接。
9)“张三”发送消息给所有的客户端。
10) 向控制台上发送一行文本,显示程序结束。
11)在Main函数中调用DelegateChatSe rverDemo。


三、实验环境
VS2008
四、实验步骤
*项目结构如下:
1.利用委托,实现为任何类型对象进行排序。
(1)在命名空间
S ortDelegate下声明一个委托
publicdelegateboolSortDelega te(Objectobj1,Objectobj2);
(2)创建排序类,类名为Sort。
1)定义一个采用冒泡排序的静态方法,方法名为
BubbleSort


2) 定义一个采用选择排序的静态方法,方法名为
SelectSort
3)定义一个采用插入排序 的静态方法,方法名为
InsertionSort
(3)创建一个汽车类,名为Car。1)定义两个字段,存储汽车的车名和价格


privatestringname;
privatedecimalprice;
2)定义两个属性,对两个字段进行读取操作3)定义一个构造方法
publicCar(stringname,decimalprice)
{
=name;
=price;
}
4
)定义一个根据车名比 较汽车的方法
根据Name属性比较
publicstaticboolCompareByN ame(Objectobj1,Objectobj2)
{
return((Car)obj 1).eTo(((Car)obj2).Name)>0;
}
5
)定义一个根据价格 比较汽车的方法
根据Price属性比较
publicstaticboolCompareB yPrice(Objectobj1,Objectobj2)
{


retur n((Car)obj1).Price>((Car)obj2).Price;
}
6)重写 ToString()方法
publicoverridestringToString()
{
returnName++Price+;
}
(4)定义一个测试类,类名为Pro gram
在主方法中写如下测试代码:
publicstaticvoidMain(stri ng[]args)
{
SortDelegatesortDelegate=eByName ;
Car[]c=newCar[]{newCar(,15m),newCar(,50m),new Car(,
70m),newCar(,35m)};
ine();
Sort(c,e ByName);
foreach(Cartempinc)
{
ine(temp);
}
ine();
ine();
Sort(c,eByPrice);
foreach(Cartempinc)
{
ine(temp);
}
ine ();
ine();
Sort(c,eByName);
foreach(Carte mpinc)
{
ine(temp);
}
ine();
ine();
Sort(c,eByPrice);
foreach(Cartempinc)


{
ine(temp);
}
ine();
ine();
i onSort(c,eByName);
foreach(Cartempinc)
{
ine(temp);
}
ine();
ine();
ionSort(c,e ByPrice);
foreach(Cartempinc)
{
ine(temp) ;
}
ine();
y();
}
五、实验调试与结果分析
1. 一开始将委托SortDelegate创建在排序类Sort中
在测试类中
错误提示为:


解决方法有两种:
(1)在测试类中不直接使用SortDelegate类,直接 写入调用方法
Sort(c,eByName);
(2)将委托SortDelegate定义 在与其他类同一个命名空间下
2.错误结果:
经过调试,发现错误在于


应改为
if(value!=null&&!.Equals(value))
正确结果如下:


实验2.结果为:


六、总结
逻辑判断中容易出错,要多 留意,委托要创建在要使用到的类的同个命名空间内,避免出错。

项目技术负责人-高中会考查询


武汉中南民族大学-村民入党申请书


冷笑话谜语大全-自荐信标题


山西干部管理学院-陕西会计网上报名入口


谢谢你作文-课改工作总结


胡润百富榜2016名单-温州医学院分数线


培根随笔-大连海事大学录取分数线


安徽成人高校招生网-中国科学技术大学录取分数线