【发布时间】:2016-05-01 23:05:00
【问题描述】:
我正在编写类以作为二进制文件、tcp 数据包等的某些二进制结构的“更高级别”表示。
为此,并且为了可读性,如果我可以定义一些自定义属性来确定有关每个类的字段的一些信息(例如,该字段在二进制缓冲区中的偏移量,大小字段等)。
我可以通过声明常量整数来实现这一点,但恕我直言,代码会非常丑陋和肮脏。所以我想到了使用属性,这是一种非常优雅的方式来完成我想要的。像 InteropServices.Marshal 这样的功能实际上使用属性(如 StructLayout、MarshalAs 和 FieldOffset)来完成与我想要的非常相似的事情,所以我只能假设与可读性的增益相比,性能权衡是有利的(如果我'我错了)。
那么,前面提到的 InteropServices 的属性是如何被编译器/CLR 处理的?
你们认为前面提到的权衡值得吗?如果是,处理属性的最佳方法是使用使用反射的默认方法?我假设可能有其他方法可以访问属性而不是反射,因为我知道这有点贵,而且 Marshal 几乎在所有方法中都使用它。
非常感谢任何有用的想法,谢谢。
【问题讨论】:
标签: c# attributes interop low-level