谁能帮我解释下这段c#代码!感激不尽
最好可以在每行代码后面都加上注释这段代码我不明白的地方有:1.这段代码里面事件是通过什么触发的?2.这段代码委托是怎样使用的?3.这段代码两个类里面方法之间的关系我搞不清...
最好可以在每行代码后面都加上注释
这段代码我不明白的地方有:
1.这段代码里面事件是通过什么触发的?
2.这段代码委托是怎样使用的?
3.这段代码两个类里面方法之间的关系我搞不清楚
请具体到这段代码里面的语句帮我说明下
先谢了
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Timers;
namespace Ch13Ex02
{
public delegate void MessageHandler(string messageText);
public class Connection
{
public event MessageHandler MessageArrived;
private Timer pollTimer;
public Connection()
{
pollTimer = new Timer(100);
pollTimer.Elapsed += new ElapsedEventHandler(CheckForMessage);
}
public void Connect()
{
pollTimer.Start();
}
public void Disconnect()
{
pollTimer.Stop();
}
private static Random random = new Random();
private void CheckForMessage(object source, ElapsedEventArgs e)
{
Console.WriteLine("Checking for new messages.");
if ((random.Next(9) == 0) && (MessageArrived != null))
{
MessageArrived("Hello Mum!");
}
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Ch13Ex02
{
public class Display
{
public void DisplayMessage(string message)
{
Console.WriteLine("Message arrived: {0}", message);
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Ch13Ex02
{
class Program
{
static void Main(string[] args)
{
Connection myConnection = new Connection();
Display myDisplay = new Display();
myConnection.MessageArrived +=
new MessageHandler(myDisplay.DisplayMessage);
myConnection.Connect();
Console.ReadKey();
}
}
}
这三段代码都是在一个名称空间里面的,其实应该不是很复杂,主要是扯到委托我有点搞不清楚关系,希望可以帮我解释下
先给20分 之后如果我懂了的话再给20分
再次谢了 展开
这段代码我不明白的地方有:
1.这段代码里面事件是通过什么触发的?
2.这段代码委托是怎样使用的?
3.这段代码两个类里面方法之间的关系我搞不清楚
请具体到这段代码里面的语句帮我说明下
先谢了
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Timers;
namespace Ch13Ex02
{
public delegate void MessageHandler(string messageText);
public class Connection
{
public event MessageHandler MessageArrived;
private Timer pollTimer;
public Connection()
{
pollTimer = new Timer(100);
pollTimer.Elapsed += new ElapsedEventHandler(CheckForMessage);
}
public void Connect()
{
pollTimer.Start();
}
public void Disconnect()
{
pollTimer.Stop();
}
private static Random random = new Random();
private void CheckForMessage(object source, ElapsedEventArgs e)
{
Console.WriteLine("Checking for new messages.");
if ((random.Next(9) == 0) && (MessageArrived != null))
{
MessageArrived("Hello Mum!");
}
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Ch13Ex02
{
public class Display
{
public void DisplayMessage(string message)
{
Console.WriteLine("Message arrived: {0}", message);
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Ch13Ex02
{
class Program
{
static void Main(string[] args)
{
Connection myConnection = new Connection();
Display myDisplay = new Display();
myConnection.MessageArrived +=
new MessageHandler(myDisplay.DisplayMessage);
myConnection.Connect();
Console.ReadKey();
}
}
}
这三段代码都是在一个名称空间里面的,其实应该不是很复杂,主要是扯到委托我有点搞不清楚关系,希望可以帮我解释下
先给20分 之后如果我懂了的话再给20分
再次谢了 展开
展开全部
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Timers;
namespace Ch13Ex02
{
//定义一个委托并指定方法签名无返回值且指定方法的参数为字符串型。
public delegate void MessageHandler(string messageText);
//定义一个类
public class Connection
{
//定义一个MsssageHandler类型的事件
public event MessageHandler MessageArrived;
//声明一个Timer类型的定时器
private Timer pollTimer;
//类的构造函数
public Connection()
{
//声明一个Timer类型的实例,参数是指定事件触发的间隔时间
pollTimer = new Timer(100);
//这个是Timer类中系统定义的一个事件,用来指定在间隔的时间到了的时候要调用的方法。(就是每隔100毫秒要触发的方法)
pollTimer.Elapsed += new ElapsedEventHandler(CheckForMessage);
}
public void Connect()
{
//启动定时器
pollTimer.Start();
}
public void Disconnect()
{
//停止计时器
pollTimer.Stop();
}
//Random类型是系统定义的一个用来生成随即数的类,这里就是实例化一个Random类型的对象
private static Random random = new Random();
//Timer定时触发时响应的方法
private void CheckForMessage(object source, ElapsedEventArgs e)
{
//输出Checking for new messages.
Console.WriteLine("Checking for new messages.");
//如果生成的随机数为小于9的非负数并且MessageArrived事件不为空(就是这个事件被触发了)
if ((random.Next(9) == 0) && (MessageArrived != null))
{
//触发MessageArrived事件
MessageArrived("Hello Mum!");
}
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Ch13Ex02
{
public class Display
{
//该方法是用来响应MessageArrived 事件的
public void DisplayMessage(string message)
{
Console.WriteLine("Message arrived: {0}", message);
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Ch13Ex02
{
class Program
{
static void Main(string[] args)
{
//实例化Connection类的对象
Connection myConnection = new Connection();
//实例化Display类的对象
Display myDisplay = new Display();
//这里创建并注册MessageArrived事件
myConnection.MessageArrived +=
new MessageHandler(myDisplay.DisplayMessage);
//该方法启动定时触发
myConnection.Connect();
//等待用户按键
Console.ReadKey();
}
}
}
LZ根据这个程序的执行步骤来,从程序的入口点一步步分析,相信应该不难的!如果不懂可以再问!
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Timers;
namespace Ch13Ex02
{
//定义一个委托并指定方法签名无返回值且指定方法的参数为字符串型。
public delegate void MessageHandler(string messageText);
//定义一个类
public class Connection
{
//定义一个MsssageHandler类型的事件
public event MessageHandler MessageArrived;
//声明一个Timer类型的定时器
private Timer pollTimer;
//类的构造函数
public Connection()
{
//声明一个Timer类型的实例,参数是指定事件触发的间隔时间
pollTimer = new Timer(100);
//这个是Timer类中系统定义的一个事件,用来指定在间隔的时间到了的时候要调用的方法。(就是每隔100毫秒要触发的方法)
pollTimer.Elapsed += new ElapsedEventHandler(CheckForMessage);
}
public void Connect()
{
//启动定时器
pollTimer.Start();
}
public void Disconnect()
{
//停止计时器
pollTimer.Stop();
}
//Random类型是系统定义的一个用来生成随即数的类,这里就是实例化一个Random类型的对象
private static Random random = new Random();
//Timer定时触发时响应的方法
private void CheckForMessage(object source, ElapsedEventArgs e)
{
//输出Checking for new messages.
Console.WriteLine("Checking for new messages.");
//如果生成的随机数为小于9的非负数并且MessageArrived事件不为空(就是这个事件被触发了)
if ((random.Next(9) == 0) && (MessageArrived != null))
{
//触发MessageArrived事件
MessageArrived("Hello Mum!");
}
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Ch13Ex02
{
public class Display
{
//该方法是用来响应MessageArrived 事件的
public void DisplayMessage(string message)
{
Console.WriteLine("Message arrived: {0}", message);
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Ch13Ex02
{
class Program
{
static void Main(string[] args)
{
//实例化Connection类的对象
Connection myConnection = new Connection();
//实例化Display类的对象
Display myDisplay = new Display();
//这里创建并注册MessageArrived事件
myConnection.MessageArrived +=
new MessageHandler(myDisplay.DisplayMessage);
//该方法启动定时触发
myConnection.Connect();
//等待用户按键
Console.ReadKey();
}
}
}
LZ根据这个程序的执行步骤来,从程序的入口点一步步分析,相信应该不难的!如果不懂可以再问!
更多追问追答
追问
//定义一个MsssageHandler类型的事件
public event MessageHandler MessageArrived;
这里的event是什么意思?还有那个MessageArrived是什么东西?
//这里创建并注册MessageArrived事件
myConnection.MessageArrived +=
new MessageHandler(myDisplay.DisplayMessage);
这里的创建并注册是什么意思?
能把有MessageArrived的代码再给我解释下吗?
谢了
追答
不知道楼主学过委托跟时间方面的东西没有,event就是C#中的一种类型,也是一种委托,不过是一种特殊的委托,微软为了让我们写代码的时候更简单于是就做了事件这种东西,它与委托的区别就是你不用想使用委托一样要先注册,而是在你定义事件时自动生成一个内嵌的类来帮助你注册,这时你可以直接用+=来注册响应的方法就像上面的myConnection.MessageArrived += new MessageHandler(myDisplay.DisplayMessage);如果用vs自带的反汇编程序打开会发现事件中使用的+=会转换为Delegate.Combine()方法,一句话事件对于委托来说就是节省了你需要写的代码量。
public event MessageHandler MessageArrived;
这里的event是什么意思?还有那个MessageArrived是什么东西?这里的MessageArrived就是基于上面定义的委托的事件(就是程序开始定义的那个委托: //定义一个委托并指定方法签名无返回值且指定方法的参数为字符串型。public delegate void MessageHandler(string messageText);)在定义你自己的事件过程中你必须要制定属于某种委托,可以用C#自带的委托,也可以用你自定义的委托,这里就是用的自定义委托。
引用://这里创建并注册MessageArrived事件
myConnection.MessageArrived +=
new MessageHandler(myDisplay.DisplayMessage);
这里的创建并注册是什么意思?
能把有MessageArrived的代码再给我解释下吗?
你知道程序中的事件和我们现实世界中的事件有点相似,每个事件发生都肯定是由某个人或组织发出的,而必然有另外的人来响应这个事件(就好像学校说明天不上课,学校是发起人,而学生和老师收到这个消息后就不来上课,学生和老师就是响应者。)注册事件就相当于是这里的制定响应人群,换句话说就是当学校说明天不上课这个消息发出后,谁会受到影响,这里就是学生和老师。
不知道这样说你懂不懂,如果还不懂的话你可以去看看这方面的书。网上也有很多资料你可以去看看。
展开全部
利用定时器 Timer 触发的
pollTimer = new Timer(100);
pollTimer.Elapsed += new ElapsedEventHandler(CheckForMessage);
0.1s 触发一次
pollTimer = new Timer(100);
pollTimer.Elapsed += new ElapsedEventHandler(CheckForMessage);
0.1s 触发一次
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询