c# 委托 和 事件 的区别
来源:互联网 发布:阿里云干什么的 编辑:程序博客网 时间:2024/05/20 18:04
据说这是一个面试题。我刚开始学的时候不怎么理解,只简单的认为委托是可以将方法作为参数传入另一个方法中的,当你的参数需要一个方法的时候就可以使用委托。
委托是一种特殊的数据类型,事件是对象,本来没有可比性,又偏偏喜欢这样问。。
但是,反编译之后会发现事件是私有类型的委托,并且有两个方法,add,remove方法。
因此事件还只能供内部调用,而且,add方法不会将之前的调用覆盖,所以事件是相对安全的。
如下代码:
class Program
{
static void Main(string[] args)
{
Say.DgSayHi dsh = Goat.SayHi;
//Say.EventSay es = Goat.SayHi;//报错,不存在类型名EventSay
dsh = Cow.SayHi;//容易被覆盖
dsh();
//Console.WriteLine(str);
Console.WriteLine("==================================");
//Say.EventSay es += new DgSayHi(Goat.SayHi);X 说明事件是一个对象,而不是类型
Say.EventSay += new Say.DgSayHi(Dog.SayHi);
//Say.EventSay("小狗");//报错, 事件“Say.EventSay”只能出现在 += 或 -= 的左边
//(从类型“Say”中使用时除外)
Say.EventSay += new Say.DgSayHi(Cow.SayHi);
Say.GoSay();
Console.ReadKey();
}
}
class Say
{
public delegate void DgSayHi();//声明一个代理
public static event DgSayHi EventSay;//仅仅相当于一个字段的声明
public static void GoSay()
{
//触发事件
EventSay?.Invoke();
}
}
//反编译后
class Goat
{
public static void SayHi()
{
Console.WriteLine("山羊是咩咩叫");
}
}
class Dog
{
public static void SayHi()
{
Console.WriteLine("小狗是汪汪叫");
}
}
class Cow
{
public static void SayHi()
{
Console.WriteLine("老牛是哞哞叫");
}
}
- C# .Net 委托和事件的区别
- C#里事件和委托的区别
- c#之委托和事件的区别
- c# 委托 和 事件 的区别
- c#委托和事件区别
- C# 事件和委托区别
- C#事件和委托区别
- C# 事件,委托与事件的区别
- C#中委托和事件的区别实例解析
- C#事件委托和回调的用法区别
- c#的委托和事件
- c#的委托和事件
- c#的委托和事件
- 委托和事件 的 区别
- 委托和事件的区别
- 委托和事件的区别
- 事件和委托的区别
- 委托和事件的区别
- oltu 实现oauth协议
- 关于指针变量,以及指针变量作为函数参数的题目分析
- 如何关闭 Android Studio 新特性Instant Run
- 安裝SQL2012 出現規則"Microsoft .NET應用程式安全性"產生警告
- route命令
- c# 委托 和 事件 的区别
- cmd使用mysql客户端
- 关于datagrid合并单元格的问题
- iOS6、7、8、9、10主要新特性和注意点
- java实现二维码-使用QR Code方式生成和解析二维码
- Apache配置
- 洛谷 P3047 [USACO12FEB]附近的牛Nearby Cows
- @dynamic与@synthesize的区别
- tomcate启动时jar包冲突。wlfullClient.jar 冲突