我正在开发一个 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# 社区还是新手,所以我不知道哪个是最标准的解决方案:
- 保持这种方式,并期望用户在必要时使用完全限定的名称?
- 将冲突的模块重命名为其他名称(可能是 Foo.Graphics 而不是 Foo.Drawing,Foo.Conversion 而不是 Foo.Convert)?
- 在标准名称(Foo.FDrawing 和 Foo.FConvert)上使用一些前缀?
- 还有别的吗?
我们将不胜感激更有经验的 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/