.net标准System.Net
中存在一个与实施点有关的先前问题,关于为何HttpMethod
仍然不是枚举。
Why is System.Net.Http.HttpMethod a class, not an enum?
关于可扩展性,它有一个很好的答案。
但是,正如我在标题中所述,为什么它不是结构?
It seems to pass all the tests according to microsofts guidelines?这是一些信息,在Web应用程序中会泛滥成灾,我“认为” DELETE
是最长的动词,它位于建议的16个字节以下。
这与字符串在.Net中处于中间状态有关吗?我知道收益可能微不足道,但我只是想更好地理解。
答案 0 :(得分:1)
结构比类没有太多优势。
对于memcpy / memcmp类型的实现,结构是完美的,在HttpMethod
的情况下是不必要的。
如果查看.net核心实现https://github.com/dotnet/corefx/blob/master/src/System.Net.Http/src/System/Net/Http/HttpMethod.cs,您会发现它使用引用相等性检查来比较实例,这比字符串比较要快一些。使用结构是不可能的...由于大多数结构实例实际上是不同的实例,因此它们必须比较字符串值。
考虑到HTTP方法的字符串值不是很长,这里的struct实际上没有其他好处,因为它仅带有一个字符串引用,并且大多数HttpMethod实例将是HttpMethod类的静态字段的实例。
它也可以是纯字符串,但是这样在编译等过程中对方法解析无济于事。