跳到主要内容

C#委托、事件、反射与特性相关

C#委托

委托是一种引用类型,表示对具有特定参数列表和返回类型的方法的引用。 在实例化委托时,你可以将其实例与任何具有兼容签名和返回类型的方法相关联。 你可以通过委托实例调用方法。

特点

  1. 委托类似于 C++函数指针,但与指针不同的是,委托是完全面向对象的,是安全的数据类型。

  2. 委托允许将方法作为参数进行传递。

  3. 委托可用于定义回调方法。

  4. 委托可以把多个方法链接在一起。这样,在事件触发时可同时启动多个事件处理程序。

  5. 委托签名不需要与方法精确匹配。

C#四种委托的异同?

  1. delegate ,至少 0 个参数,至多 32 个参数,可以无返回值,可以指定返回值类型。

  2. Action ,至少 0 个参数,无返回值的泛型委托。

  3. Func ,至少 0 个参数,至多 16 个参数,必须有返回值的泛型委托。

  4. Predicate ,有且只有一个参数,返回值只为 bool 类型。

参考文章

  1. 委托(C# 编程指南)

  2. C#四种委托的区别

C#事件

类或对象可以通过事件向其他类或对象通知发生的相关事情。 发送(或引发)事件的类称为“发布者”,接收(或处理)事件的类称为“订阅者”。事件是一种特殊的委托。

C#反射

详情阅读:https://docs.microsoft.com/zh-cn/dotnet/csharp/programming-guide/concepts/reflection

反射提供描述程序集、模块和类型的对象(Type 类型)。 可以使用反射动态地创建类型的实例,将类型绑定到现有对象,或从现有对象中获取类型,然后调用其方法或访问器字段和属性。 如果代码中使用了特性,可以利用反射来访问它们。

简单示例:

int i = 42;
Type type = i.GetType();
Console.WriteLine(type);//输出:System.Int32。

Assembly info = typeof(int).Assembly;
Console.WriteLine(info);//输出:System.Private.CoreLib, Version=6.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e

C#特性

特性(Attribute)是用于在运行时传递程序中各种元素(比如类、方法、结构、枚举、组件等)的行为信息的声明性标签。您可以通过使用特性向程序添加声明性信息。一个声明性标签是通过放置在它所应用的元素前面的方括号([ ])来描述的。

特性(Attribute)用于添加元数据,如编译器指令和注释、描述、方法、类等其他信息。.Net 框架提供了两种类型的特性:预定义特性和自定义特性。

参考文章

  1. C# 特性(Attribute)

  2. 特性 (C#)