随笔 - 51  文章 - 0 评论 - 210 trackbacks - 6
<2007年12月>
2526272829301
2345678
9101112131415
16171819202122
23242526272829
303112345

严正声明 : 本站文章转载请注明出处.

与我联系

搜索

 

留言簿(11)

我的标签

随笔分类

随笔档案

Atlas相关

积分与排名

  • 积分 - 58801
  • 排名 - 800

阅读排行榜

俺理解的事件就是一个强类型的代理. 在类的内部引发事件,然后调用“宇宙”内的一个方法(它并不知道来自于哪进而),并传进去一个参数,告诉它究竟发生了什么.

所有关心这个事件的对象可以订阅该事件,并把相应的处理方法绑定到这个事件. 在事件发生后这些方法就会被自动执行,而不需要事件源来手动调用, 事件源也不需要与提供该方法的对象发生关联.

一个实例, 我们在照片产生的时候为它打上一个时间戳, 而PhotoManager自已不想干这个活,把它交给了PhotoMonitor来完成 :)

using System;
using System.Collections.Generic;
using System.Text;

namespace EventTest
{
    
public class PhotoManager
    
{
        
public static event EventHandler<PhotoInsertedEventArgs> PhotoInserted;

        
public PhotoManager()
        
{
            PhotoManager.PhotoInserted 
+= new EventHandler<PhotoInsertedEventArgs>(PhotoMonitor.AddDate);
        }

        
public void InsertPhoto()
        
{
            Photo photo 
= new Photo();
            photo.Title 
= "Darkangel";
            OnPhotoInserted(photo);
            Console.WriteLine(
"A photo is created!!!");
            Console.WriteLine(
"The created date is : ");
            Console.WriteLine(photo.CreateDate);
        }

        
protected static void OnPhotoInserted(Photo p)
        
{
            
if (PhotoInserted != null)
            
{
                PhotoInsertedEventArgs e 
= new PhotoInsertedEventArgs(p);
                PhotoInserted(
null, e);
            }

        }

    }

    
public class Photo
    
{
        
private string title;

        
public string Title
        
{
            
get return title; }
            
set { title = value; }
        }


        
private DateTime createDate;

        
public DateTime CreateDate
        
{
            
get return createDate; }
            
set { createDate = value; }
        }

    
    }


    
public class PhotoInsertedEventArgs : EventArgs
    
{
        
public PhotoInsertedEventArgs(Photo p)
        
{
            
this.insertedPhoto = p;
        }


        
private Photo insertedPhoto;

        
public Photo InsertedPhoto
        
{
            
get return insertedPhoto; }
            
set { insertedPhoto = value; }
        }

    
    }

    
public static class PhotoMonitor
    
{
        
public static void AddDate(object sender, PhotoInsertedEventArgs e)
        
{
            e.InsertedPhoto.CreateDate 
= DateTime.Now;
        }

    }

}


测试代码:

using System;
using System.Collections.Generic;
using System.Text;
using NUnit.Framework;
using EventTest;

namespace TestLib
{
    [TestFixture]
    
public class EventTestFixture
    
{
        [Test]
        
public void PhotoInsertedEventTest()
        
{
            PhotoManager manager 
= new PhotoManager();
            manager.InsertPhoto();
            Assert.IsTrue(
true);
        }

    }

}




posted on 2007-12-21 17:34 沙加 阅读(295) 评论(6)  编辑 收藏 网摘 所属分类: .Net开发技巧系列

FeedBack:
#1楼  2008-02-07 15:27 seek      
public static event EventHandler PhotoInserted;

为何不用
public static event EventHandler PhotoInserted;呢?

  回复  引用  查看    
#2楼  2008-02-07 15:35 seek      
e.InsertedPhoto.CreateDate = DateTime.Now;

CreateDate
明明是Photo类的方法,怎么在PhotoInsertedEventArgs里调用呢?
初学事件。还请指教!
  回复  引用  查看    
#3楼 [楼主] 2008-02-07 19:30 沙加      
@seek
那个也是可以的,但在2.0中用这个泛型的似乎更好一些,.

PhotoInsertedEventArgs是一个自定义的事件参数,它有一个类型为Photo的公开属性. e.InsertedPhoto.CreateDate = DateTime.Now; 是给这个照片对象的属性赋值.
  回复  引用  查看    
#4楼  2008-02-16 23:01 seek      
[TestFixture]//这个特性是干吗的?
public class EventTestFixture
{
[Test]//还有这个?
public void PhotoInsertedEventTest()
{
PhotoManager manager = new PhotoManager();
manager.InsertPhoto();
Assert.IsTrue(true);//这句也不懂....
}
}

希望作者能给予解释,再次感谢!
  回复  引用  查看    
#5楼  2008-02-16 23:21 seek      
PhotoInsertedEventArgs类的意义还是没有看出来在哪里?
  回复  引用  查看    
#6楼 [楼主] 2008-02-17 15:33 沙加      
@seek
[Test] 表明这是一个NUnit的测试方法.

PhotoInsertedEventArgs 用来封装照片插入的事件参数,告诉“宇宙”里面关心这个事件的人是哪张照片,订阅了这个事件的人就知道了.
  回复  引用  查看    

标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
Google站内搜索


China-pub 计算机图书网上专卖店!6.5万品种 2-8折!
近千种 9-95 新二手计算图书火热销售中!

相关文章:

相关链接: