C++与C#对比学习:消息,事件(一)(二)

2014-11-24 10:18:09 · 作者: · 浏览: 1
lass中某个函数时,不想让直接调用,或者函数声明为private的,就可通过event间接的调用.因为delegate相当于指向函数的指针,而event又相当于是对delegate的封装.那你可能又问封装有啥好的啊,这可能是体现一种设计思想,对以后扩充功能或做一些额外的处理有用吧.不然像像我们把所以类中的字段都给封装成一个个的属性(property),大部分时候是一点都看不出来有啥用,反而觉得有点多此一举,还不如直接用字段别用属性呢.但如果我们有时想在属性中做些额外的处理时特别有用.比如只让你读取字段值不让赋值,或者反过来.

举个用自定义事件调用其他类中的private函数的简单例子吧.

在class A中有private的函数sayHello.那class B中肯定不能直接调用sayHello了.当然我们另外还要假设在A中用到了B.

delegate void DelegateSayHello(string name); //在类外面某个地方,它其实也可以看成一种特殊的类了.当然也可以放在某个类里面定义

public class A

{

B sb;

sb.HowAreYou += new DelegateSayHello(sayHello);

private void sayHello(string name)

{

Console.WriteLine("Hello," + name);

}

}

public class B

{

public event DelegateSayHello HowAreYou;

string name = "arwen";

private void DoSomething()

{

HowAreYou(name); //这里就调用了class A中的private函数sayHello了啊

}

}