c# - 扩展 List<T> 违反开闭原则

标签 c# list open-closed-principle

我刚刚在我的一个类中创建了以下方法

public static bool Assimilate(this List<Card> first, List<Card> second)
{
    // Trivial
    if (first.Count == 0 || second.Count == 0)
    {
        return false;
    }

    // Sort the lists, so I can do a binarySearch
    first.Sort();
    second.Sort();

    // Copia only the new elements
    int index;
    for (int i = 0; i < second.Count; i++)
    {
        index = first.BinarySearch(second[i]);
        if (index < 0)
        {
            first.Insert(~index, second[i]);
        }
    }

    // Edit
    second = null;

    return true;
}

我的一个 friend 在审查我的代码时说,我不应该创建“扩展 List 类”的方法,因为这违反了开放/封闭原则。 如果我想扩展类 List,我应该创建一个继承自 List 的新类,并在该新类中实现我的“合并”方法。 他是对的吗?扩展 List 类违反了开闭原则?

最佳答案

我不认为这违反了开闭原则。我考虑的是,如果我必须“更改”现有代码以向对象添加功能,那么我违反了打开/关闭,但是扩展对象正是您应该做的来添加功能。

您可以在不同的语言中以不同的方式扩展对象,继承只是一种方式; c# 使您能够向现有类添加扩展方法。

记住“打开扩展 - 关闭修改”

关于c# - 扩展 List<T> 违反开闭原则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23298068/

相关文章:

java - 开闭原则示例

c# - 如何加载相对于 DLL 的附属程序集

python - 比较两个字符串并创建一个包含该字母以及该字母在字符串中的计数的列表

rust - Rust可以替代C++ ADL重载函数吗?

c# - 突破开闭原则

android - 在android中获取光标处的所有项目

c# - Xamarin 表单选取器中的 System.ArgumentOutOfRangeException

c# - 将 C# 库转换为 MSTest 项目

为二维数组调用 Array.GetLength(1) 时出现 C# IndexOutOfRangeException

python - 尝试找出句子中出现次数最多的情态动词