首先,在我看来,您编写了示例并忘记了扩展方法中更重要的关键字,您错过了参数之前的关键字“this”!:)
我猜你的意思是:
public static class TradeDataExt
{
public static bool IsActiveTrade(this TradeData tradeData){...}
public static bool IsActiveRisk(this RiskData riskData) {...}
}
好的,第一点说,现在让我们来看看你的问题:
这一要求是由同行开发人员将不同类型的扩展方法混合到一个 xxxExt 类中的悲痛驱动的。它仍然有效,因为编译器通过查看导入的命名空间来处理解决方案。
实际上,您所说的与扩展方法的工作原理完全相反!
当您使用静态方法声明静态类时,这些方法将在使用“命名空间”声明时自动可用,而不是类的名称!(除非您的项目包含多个 .cs 文件,这些文件是同一个静态类的部分类.....我认为这没有意义)
看看这个例子:
namespace Gabriel.Extensions
{
public static class ClassWithSameName
{
public static bool IsActiveTrade(this TradeData tradeData){...}
}
}
namespace John.Extensions
{
public static class ClassWithSameName
{
public static bool IsAGoodDeal(this TradeData tradeData){...}
}
}
如果您查看示例,两个类具有相同的名称,但由于它们位于不同的命名空间中,因此它们只会在显式声明每个命名空间的“使用”时扩展 TradeData 类。所以,我会说这是适合你的方法:
您应该使用命名空间来控制正在创建的类型扩展,因此您可以拥有像 XXXX.Extensions.Validation、XXXXX.Extensions.Calculation、XXXXX.Extensions.ServicesProvider 等这样的命名空间......而不是同时使用所有命名空间(因为事情会变得复杂......在同一个命名空间中添加数百个扩展方法,根本不是最佳实践。
您的代码应如下所示:
namespace TradeDataExtensions.Validation
{
public static class ClassWithSameName
{
public static bool IsActiveTrade(this TradeData tradeData){...}
}
}
namespace TradeDataExtensions.Analytics
{
public static class ClassWithSameName
{
public static decimal ExpectedReturn(this TradeData tradeData){...}
}
}