c# - .Net 属性功能是在编译时还是在运行时或两者都使用?

标签 c# .net attributes

在 .Net 中,属性功能是在编译时还是运行时或两者都使用?能举几个例子吗?

最佳答案

大多数 仅在运行时使用。编译器使用的数量非常有限,包括:

  • [Conditional(...)] - 省略每个构建符号的方法调用
  • [Obsolete(...)] - 发出警告/错误作为构建输出
  • [Serializable] - 写成 CLI 标志
  • [Extension] - 用于扩展方法
  • [AttributeUsage] - 影响属性的应用方式
  • -

编译器在创建程序集文件时会使用诸如 [AssemblyVersion][AssemblyFileVersion] 等一系列内容,以及诸如 [InternalsVisibleTo] 影响可访问性。

此外,像 PostSharp 这样的工具会根据属性执行额外的编译后步骤。

编译器可能会添加一些其他属性到生成的类型/方法(用于匿名方法/类型、迭代器 block 等)。

关于c# - .Net 属性功能是在编译时还是在运行时或两者都使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2311719/

相关文章:

C#/Mono Console.In.ReadToEnd() 停止进程

c# - 如何设计在 Windows Vista/7 上以管理员身份运行的自动启动应用程序?

c# - 可以从线程调用返回类型为列表的方法吗

.net - 为什么即使在 NetworkStream.EndRead 返回 0 字节后我仍然接收数据?

c# - 在基于 .Net 4.0 的应用程序中解码 JWT token

c# - 基于 bool 值的线程阻塞

c# - C# API 错误和异常处理的最佳实践

php domdocument获取属性值所在的节点值

search - Sitecore - 与其他节点具有相同属性的补丁节点

c# - ASP.NET MVC4 中的多个远程验证属性