在C#中使用扩展方法而不是实例方法的缺点

时间:2014-12-19 20:45:52

标签: c# static extension-methods

假设我有一个名为Building的班级。这是在程序开始时创建的。我需要对Building类的变量进行数百次操作。现在我有两个选择。

1.使用方法定义各种类并将Building传递给它们

class StoryService
{
    private readonly Building building;

    public StoryService(Building building)
    {
        this.building = building;
    }

    public void AddStory() {}
}

2.定义Building

的扩展方法
static class StoryExtensionMethods
{
    public static void AddStory(this Building building) {}
}

现在在我的申请中:

var building = new Building();

// Method 1
var storyService = new StoryService(building);
storyService.AddStory();


// Method 2
building.AddStory();

现在我的问题是,在绩效和良好实践方面,这是哪一种方式。哪一个会减少类耦合?

1 个答案:

答案 0 :(得分:3)

我从来没有发现使用静态扩展的特别好的理由,因为这样做(如果其他人在代码库上工作)对他们来说有点混乱,因为有几个地方需要寻找给定类的方法声明。

然而,对你不拥有的东西进行静态扩展(例如,为了使其成为标题大小写,将新方法添加到字符串中)非常有意义。

所以我要尽可能地避免它,但如果你觉得有必要或者没有能力编辑课程本身,那么创建扩展并确保其他人知道它。

表现效果可以忽略不计。