我有自己的数学库,我希望它被称为"数学" (我一直在称它为#34;数学")。它位于自己的命名空间中,但是类名是" Math"仍然与System.Math冲突。我解决这个问题的方法是在System.Math中为我的库添加一个包装器,它只显式地调用System.Math函数,然后我必须添加
using Math = Yushatak.Libraries.Math;
到每个使用Math。*功能的文件。我不觉得这是最好的方法,我也担心包装会造成额外的开销,而且这不是你想要开销的地方......
么?是否有更好的方式来扩展" System.Math?这只是一个坏主意,我应该回到"数学"?有什么建议吗? :P
包装方法示例:
public static decimal Abs(decimal value)
{
return System.Math.Abs(value);
}
答案 0 :(得分:5)
这个答案现在有三个不同的部分。
虽然using
语句方法除了源代码中的一个额外行之外没有任何开销,但包装器方法会以多种方式产生开销。
System.Math
中有很多方法。准确地复制包装纸充其量是乏味的。使用不同的策略可以防止上述所有情况。
通常的做法是有意避免名称冲突我命名新的类NameEx
,其中Name
是原始名称。例如,您可能有兴趣创建类MathEx
。
您还可以使用以下内容来处理冲突的名称。
using Math = Yushatak.Libraries.Math;
using SystemMath = System.Math;
这在Visual Studio扩展开发中经常发生,特别是对于名为Constants
和IServiceProvider
的类。