AddressFamily(例如 NS 和 Ipx)具有重叠的枚举值是什么意思?

What does it mean to have overlapping enum values for AddressFamily (e.g. NS and Ipx)?

我知道 enum 可以有 重叠 值,因为在一天结束时枚举只是 int 和多个 东西可以有一样int。对我来说(也许这是需要澄清的一点)这意味着那些共享相同 int 的 2+ 事物在所有意图和目的上都是相同的。

那么问题是:

  1. 对于 AddressFamily 的枚举而言,多个协议共享相同的枚举值是什么意思?比如NS和Ipx都是6,但是NS是"Address for Xerox NS protocols",Ipx是"IPX or SPX address." Iso和Osi也是同值(7),但是各自的意思是"Address for ISO protocols" 和 "Address for OSI protocols."

半相关问题:Enums, overlapping values, C#

OSI model也可以称为ISO模式。实际上,我是将其作为 ISO-OSI 模型学习的。部分原因是这是定义它的组织的名称。部分原因是你也可以反过来看:物理层是 7,应用层是 1。此时你也可以翻转字母。

至于 IPX 和 NS,值得记住的是这个枚举的目的是 "Specifies the addressing scheme that an instance of the Socket class can use."

作为wikipedia points out

"Internetwork Packet Exchange (IPX) is the network layer protocol in the IPX/SPX protocol suite. IPX is derived from Xerox Network Systems' IDP." I guess NS used to be it's own thing back in the day. But nowadays, even the followup IPX is hardly remembered. It is hard to tell as I can not find "xerox ns protocol" on Wikipedia, but as IDP was from Xerox too makes that guess solid. Back in those days they were still doing the whole "Format War IX - Networking Edition".

这种情况下的枚举通常被送入 switch/case 块。我想为此 - 在实际代码中 - 没有区别是必要的。然而,人们仍然觉得他们需要在该枚举中有两个值。如果有任何问题出现 "where is NS/IPX?"

拥有多个具有相同值的 Enum 的唯一问题是从 Integer 获取 Enum 很困难。然而,由于 Enumeartions 被设计为编译时常量,这几乎不是问题。