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

标签 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();

现在我的问题是,就性能和良好实践而言,其中哪一个是可行的方法。哪一个会降低类耦合?

最佳答案

我从来没有找到使用静态扩展的特别好的理由,因为这样做(如果其他人正在处理代码库)会让他们有点困惑,因为有几个地方可以在给定类上查找方法声明.

但是,对您不拥有的东西进行静态扩展(例如,向字符串添加一个新方法以使其成为首字母大写)很有意义。

所以我会说如果可能的话要避免它,但如果你觉得需要或没有能力编辑类本身,那么创建扩展并确保其他人知道它。

性能影响可以忽略不计。

关于c# - 在 C# 中使用扩展方法而不是实例方法的缺点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27573660/

相关文章:

c# - Controller 的部分类

c# - 在 NInject 中实现 OnePerSessionBehavior

java 帮助阐明带有泛型类的工厂方法

c++ - 初始化模板内部类的静态成员

c - C中的静态变量如何在内存中持久化?

c# - 如何覆盖 ToString() 并实现泛型?

c# - 获取中心多边形 C#

c# - 什么时候使用属性而不是属性?

c# - 当类型参数为 IEnumerable<T> 时,如何将扩展方法附加到泛型类?

c# - Ninject:注入(inject)内部扩展方法