我正在使用C#/ .NET 3.5中的选择器模式实现一些网络代码。但是,我惊奇地发现Select
方法采用非通用IList
而不是IList<Socket>
's。它在帮助文档中明确指出,虽然预计这里没有其他插座列表。为什么Socket.Select(...)需要IList而不是(也)IList <Socket>?
有谁知道这是为什么?
我正在使用C#/ .NET 3.5中的选择器模式实现一些网络代码。但是,我惊奇地发现Select
方法采用非通用IList
而不是IList<Socket>
's。它在帮助文档中明确指出,虽然预计这里没有其他插座列表。为什么Socket.Select(...)需要IList而不是(也)IList <Socket>?
有谁知道这是为什么?
从the docs:
支持:4,3.5,3.0,2.0,1.1,1.0
这将在.NET 1.0是一个非常有趣的签名......
如果不打破现有的呼叫者,则不能更改签名。他们可能会添加一个重载,但我不确定这会有多大的帮助 - 如果您尝试使用错误参数类型的“新”重载(例如List<string>
而不是List<Socket>
),它只会绑定到旧的过载。
Socket.Select
(我假设你的意思是Select)是一种已经存在于.NET 1.0中的方法,而且微软显然从来没有打算更新它,可能是因为它是一个古怪而且很少使用的API。
他们怎么可能更新它呢? – 2010-06-21 14:58:23
使用'ObsoleteAttribute'提供重载并修饰原始函数。 – ErikHeemskerk 2010-06-21 15:15:22
谢谢。关于他们为什么不能添加额外超载的解释是我错过的。 – 2010-06-21 18:22:02