C# 分类使用和设计

C# 分类使用和设计,c#,c#-4.0,.net-4.5,C#,C# 4.0,.net 4.5,这是一个基本问题,但我不知道如何设置这个类。我有一个c#代码文件太大了,所以我想开始把它分解成更小的块 所以我拿出3个方法,把它放在这个叫做事件的类中 现在,如果我的主类需要这个新类中的方法,我可以这样称呼它吗 我确实试过这个,而且很有效。但我这样做似乎并没有真正节省空间 IEnumerable<EngineSchema> thisWeeksParts = Events.WeeklyPartsList(engineCat, star

这是一个基本问题,但我不知道如何设置这个类。我有一个c#代码文件太大了,所以我想开始把它分解成更小的块

所以我拿出3个方法,把它放在这个叫做事件的类中

现在,如果我的主类需要这个新类中的方法,我可以这样称呼它吗

我确实试过这个,而且很有效。但我这样做似乎并没有真正节省空间

IEnumerable<EngineSchema> thisWeeksParts =
                          Events.WeeklyPartsList(engineCat, startDay, endDay) 
IEnumerable thisWeeksParts=
事件。周partslist(engineCat、startDay、endDay)
谢谢

这是新的课程:

public static class Events
{
    public static IEnumerable<EngineSchema> WeeklyPartsList(IEnumerable<EngineClass> engineCategory, DateTime startDay,
        DateTime endDay)
    {
        var EngineParts =
            engineCategory.SelectMany(e => e.Pages)
                .Where(c => c.StartDateTime >= startDay & c.EndDateTime <= endDay);
        return EngineParts;
    }

    public static IEnumerable<EngineClass> ClassOfEngine(int EngineSpecGroupID)
    {
        return Repository.Query()
            .Where(c => c.VehicleGroup.Any(cg => searchParts.Contains(EngineSpecGroupID)));
    }

    public static IEnumerable<EngineSchema> GetEngineList(int engineYear, DateTime startDate, DateTime endDate)
    {
        return WeeklyPartsList(ClassOfEngine(engineYear), startDate, endDate);
    }
}
公共静态类事件
{
公共静态IEnumerable WeeklyPartsList(IEnumerable EngineecCategory,DateTime startDay,
日期时间(截止日期)
{
var引擎部件=
engineCategory.SelectMany(e=>e.Pages)
其中(c=>c.StartDateTime>=startDay&c.EndDateTime c.VehicleGroup.Any(cg=>searchParts.Contains(EngineSpecGroupID));
}
公共静态IEnumerable GetEngineList(int engineYear、DateTime startDate、DateTime endDate)
{
返回每周零件清单(发动机类别(engineYear)、开始日期、结束日期);
}
}

是,这就是在静态类中调用静态方法的方式。如果代码文件的大小是您唯一关心的问题,我会选择创建一个新文件并使用

如果我的主类需要这个新类中的方法,我是否可以这样调用它?[……]

虽然“纯”静态语法工作正常,但切换到扩展语法可能会稍微方便一些:

public static IEnumerable<EngineSchema> WeeklyPartsList(this IEnumerable<EngineClass> engineCategory, DateTime startDay, DateTime endDay) ...
//                                                      ^^^^

我不明白。有什么问题吗?你试过了吗?或者你只是在问我们,在你尝试之前,它是否会起作用?我确实尝试过,而且它起作用了。但这看起来很麻烦,我不确定这样做是否节省了空间/时间。老实说,这看起来应该可以很好地工作。将代码拆分为不同的部分有助于减少每个文件中的混乱,并可以澄清系统的每个部分都做了什么以及每个部分都有什么职责。通过拆分,您更接近于遵守单一责任原则(SRP)和关注点分离。这不是答案。比鼓励静态类使用要好,因为文件太大。等等,这是怎么回事?该方法需要将IEnumerable EngineCategray作为参数传递给它。@SkyeBoniwell在第一个参数前面添加
这个
,您可以在
事件.Foo(firstArg,secondArg)
firstArg.Foo(secondArg)
调用方式中进行选择,其中隐含
事件
部分。这是一个100%的编译器技巧-编译器生成的IL代码完全相同。编译器获取调用的“目标”,即
firstArg
,并将其作为第一个参数粘贴到对
Events.Foo
方法的调用中。
IEnumerable<EngineSchema> thisWeeksParts = engineCat.WeeklyPartsList(startDay, endDay);
foreach (var part in Events.ClassOfEngine(123).WeeklyPartsList(startDay, endDay)) {
     ...
}