在我工作过的所有公司中,我最终都支持一组核心库,这些库无非是增强和扩展 .net 库。通常我有这样的命名空间,它们以我们的公司名称开头,但子命名空间反映了命名空间的那些System
。
Foo.IO; Foo.Web
我打算做的是更进一步,用系统命名空间替换公司命名空间,这样你只需要一个 using 语句,从而更好地增强核心库。
namespace System.IO
{
public static class StreamExtensions
{
...
}
}
实际问题
现在我知道这是可能的,微软在他们自己的库中做到了,我已经看到它在其他第三方库中做到了,但我想知道的是,如果有的话,这样做的长期影响是什么,比如一个类.net 更高版本中的名称冲突?有没有人这样做并且不得不处理一个复杂的问题,它破坏了仅仅能够添加程序集引用的简单性?
更新
不幸的是,这变成了更多关于你是否应该这样做的辩论,这可能属于程序员。不雅地还有另一个SO question确实问了这个问题,但这不是问题的重点。
我想知道是否存在会导致编译错误或奇怪行为的场景。唯一出现的两个论点是。
Microsoft 将方法添加到与库中扩展方法的签名相匹配的对象,但这是一个静音点,因为它不会影响扩展方法所在的命名空间,因为对象上的实现将优先。
其他人在他们的第三方库中做同样的事情,我们有一个名字冲突。这更有可能是我们已经必须处理的事情,第三方库 ILMerge 其他库到他们的程序集中。
需要明确的是,这是一个独立的库,它是供内部使用的,不能在外部使用,并且可以通过扩展方法扩展现有的系统库。