※ 引述《jodo1984 (XDDD)》之铭言:
: 首先感谢您抽空另外写一支程式让我参考
: 不过有点抱歉毕竟我c#功力还没有那么深厚很多地方看不太懂, 想请问一下
: 1. 这个是什么意思
: EventHandler<SpeedEventArgs> handler =Interlocked.CompareExchange(ref
: this._tooSlowHandler, null, null);
CompareExchange有三个参数 分别是location1 value comparand
如果location1(第一个)与comparand(第三个)相等就用value(第二个)把location1取代掉
回传值是location1的原始值
这里只是要用Interlocked来做执行绪安全的读取
: 2.请问您怎么没有用到委派而是用执行续, 如果要使用事件不需要搭配委派吗?
private EventHandler<SpeedEventArgs> _tooFastHandler;
private EventHandler<SpeedEventArgs> _tooSlowHandler;
这两个就是私有实体委派字段 拿来放方法
只是我使用了系统内建拿来放事件处理例程的泛型委派
: 3.我用debug模式car.Speed 好像数值没有传入 如果我要将数值传入需要怎么修正?
: private void TooFast(object o, SpeedEventArgs e)
: {
: var car = o as Car;
: if (car != null)
: {
: MessageBox.Show(string.Format("{0}目前的速度为{1},超过200,请
减
: 速慢行", car.Name, car.Speed));
: }
: }
: private void TooSlow(object o, SpeedEventArgs e)
: {
: var car = o as Car;
: if (car != null)
: {
: MessageBox.Show(string.Format("{0}目前行驶速度{1},已低于限速
: 80,请加速行驶",car.Name, car.Speed));
: }
: }
我用文章内的程式码
下中断点在private void TooFast(object o, SpeedEventArgs e)下的那个花括号
速度设300 会中断 您可再试试
: 4. 请问有推荐C#书籍吗?
初阶的话 就到书店找本看得懂的 照着做
进阶的话 CLR via C# 与 C# in Depth 这两本都对C#进阶的机制说明得很好