5

这一要求是由同行开发人员将不同类型的扩展方法混合到一个 xxxExt 类中的悲痛驱动的。它仍然有效,因为编译器通过查看他导入的命名空间来处理分辨率。但是当涉及到重叠类型时,这很烦人并且不容易维护。

是否有可能限制可以在特定 xxExt 类中编写的类型扩展?循环手动规则效果不佳......如果没有编译器级别的限制,可能类似于静态代码分析?

代码(我想在这个类中限制是 IsActiveRisk 方法)。

public static class TradeDataExt{
     public static bool IsActiveTrade(this TradeData tradeData){...}

     public static bool IsActiveRisk(this RiskData riskData) {...}


}

这更像是一个“想要的”功能,不确定是否可能。评论/建议会有所帮助。

4

1 回答 1

2

首先,在我看来,您编写了示例并忘记了扩展方法中更重要的关键字,您错过了参数之前的关键字“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){...}
    }
}
于 2013-05-21T04:34:22.980 回答