【发布时间】:2019-05-25 10:58:54
【问题描述】:
C# operator overloading with List<T>
基于第一个问题,我通过从其中一个 List 继承实现了运算符重载。
今天我偶然发现了第二个链接。所以我的问题是“是否可以使用 List 进行运算符重载而不继承它?”
//复制第一个问题的内容
我正在尝试在 C# 中重载一个适用的运算符(不要问为什么!) 到列表。例如,我希望能够写:
List<string> x = // some list of things List<string> y = // some list of things List<string> z = x + y所以'z'包含'x'的所有内容,后跟内容 的'y'。我知道已经有方法可以组合两个列表, 我只是想了解运算符重载是如何工作的 通用结构。
(顺便说一下,这是来自 Systems.Collections.Generic 的 List 类。)
【问题讨论】:
-
为什么不编写扩展方法而不是尝试执行运算符重载?从好的方面来说,扩展方法可以通过处理实现
IList<T>(或ICollection<T>;无论你想要/需要什么......)的任何类型来实现通用目的。 -
@elgonzo:你能为第一个问题写这个吗?我不希望在其他列表中使用该功能。
-
解释为什么不继承的例子推荐组合而不是继承。操作重载不是组合。它只是您想要添加到现有类的额外功能。因此,如果您将继承用于运算符重载,那么您并没有错。你可以有一些更好的方法,比如扩展方法或在基础上有一个接口等。
-
@ChetanRanpariya 扩展方法会将该功能添加到所有列表中,我只想要一些列表。
-
@DeepakMishra,不正确。扩展方法不需要适用于所有(列表)类型。扩展方法适用于可分配给扩展方法的
this参数类型的类型。 (如果扩展方法是泛型的,甚至可以通过使用泛型类型约束来进一步限制)