C# 命名空间 : how to follow standards without causing annoying conflicts?

标签 c# namespaces conflict name-conflict

我正在开发一个 C# 库(为了这个问题,我们就称它为“Foo”)。它有一些与标准 .NET 需求非常相似的需求:例如,它提供一些绘图服务和一些转换服务。

为了熟悉和库的用户能够猜出什么叫什么,我想遵循 .NET 标准,并将库的这些部分命名为 Foo.Drawing 和 Foo.Convert(等等在)。但我发现在实际使用中,这会导致疼痛。人们几乎总是有“使用系统”;在每个文件的顶部,当使用这个库时,他们想要“使用 Foo;”以及。但现在他们有两个 Drawing 和两个 Convert 模块,接下来就很热闹了。

例如,现在您必须明确拼出 System.Drawing.Color,而不是仅仅使用 Drawing.Color 作为参数或变量类型,否则编译器会提示 Foo.Drawing 没有 Color 类型。同样,您想要使用标准的 Convert.ToInt32,您必须说 System.Convert.ToInt32,即使您已经在使用 System,因为否则它会找到 Foo.Convert 而找不到 ToInt32。

我明白为什么这一切都是这样,但我对 C# 社区还是新手,所以我不知道哪个是最标准的解决方案:

  1. 保持这种方式,并期望用户在必要时使用完全限定的名称?
  2. 将冲突的模块重命名为其他名称(可能是 Foo.Graphics 而不是 Foo.Drawing,Foo.Conversion 而不是 Foo.Convert)?
  3. 在标准名称(Foo.FDrawing 和 Foo.FConvert)上使用一些前缀?
  4. 还有别的吗?

我们将不胜感激更有经验的 C# 大师的任何建议!

最佳答案

您可以使用命名空间别名:

using System;
using FConvert = Foo.Convert;

public class Bar
{
     public void Test()
     {
          var a = Convert.ToInt32("1");
          var b = FConvert.ToInt32("1");
     }
}

关于C# 命名空间 : how to follow standards without causing annoying conflicts?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23996688/

相关文章:

Typescript:如何使用 import 语句声明命名空间?

c# - 如何在一个项目中使用两个不同的 Microsoft Interop 程序集?

c# - 具有完整迁移支持的 .net Active Record ORM

c++ - 如何将 C++ 命名空间分解为多个文件

c++ - 命名空间被视为类型

windows - TideSDK与XAMPP bundle 冲突

jquery - MooTools 和 jQuery 冲突 - 尽管有美元安全模式

c# - 如何从 MSBuild 代码分析中获取 XML 报告

c# - 如何将谓词定义为函数参数

c# - DDD 和持久性。再次