可操作界面.net
IOperable interface .net
.Net中有这样的界面吗
public interface IOperable<T>
{
T Add(T add);
T Substract(T subs);
T Multiply(T mult);
T Divide(T div);
//and so on
}
对于您知道可操作的管理泛型?甚至原始人。
例如,对于 class Interval<T>
,如果 End 和 Start 为 IOperable
(End.Substract(Start);
),我们将能够获得长度。
我知道 ISet<T>
操作,但该方法适用于非连续的元素,但对于连续元素,我在 c# 中没有看到任何方法。
如果没有,为什么不存在于当前的 .Net 中?发展原因?哲学的?
有没有图书馆提供这种方法?
"Nope".
如果发生这种情况,几乎可以肯定不会通过接口,而是:通过通用运算符约束支持。
接口存在一些语义问题:并非所有数字系统都实现所有相同的运算符 - 结果并不总是相同(例如,向量/矩阵的除法和乘法;或者:您可以添加并减去两个 TimeSpan
,但你不能将它们相乘或相除,等等);甚至当它们这样做时:含义可能会改变(整数除法与浮点除法不同,例如,对于无符号数据类型,减法和取反变得很奇怪)。
通用运算符约束已经讨论过几次,但从未进入语言。
您可以使用 dynamic
作弊,但这涉及 "boxing",因此会有一些不小的开销。或者 MiscUtil.
中内置(或曾经)一些通用运营商服务
.Net中有这样的界面吗
public interface IOperable<T>
{
T Add(T add);
T Substract(T subs);
T Multiply(T mult);
T Divide(T div);
//and so on
}
对于您知道可操作的管理泛型?甚至原始人。
例如,对于 class Interval<T>
,如果 End 和 Start 为 IOperable
(End.Substract(Start);
),我们将能够获得长度。
我知道 ISet<T>
操作,但该方法适用于非连续的元素,但对于连续元素,我在 c# 中没有看到任何方法。
如果没有,为什么不存在于当前的 .Net 中?发展原因?哲学的? 有没有图书馆提供这种方法?
"Nope".
如果发生这种情况,几乎可以肯定不会通过接口,而是:通过通用运算符约束支持。
接口存在一些语义问题:并非所有数字系统都实现所有相同的运算符 - 结果并不总是相同(例如,向量/矩阵的除法和乘法;或者:您可以添加并减去两个 TimeSpan
,但你不能将它们相乘或相除,等等);甚至当它们这样做时:含义可能会改变(整数除法与浮点除法不同,例如,对于无符号数据类型,减法和取反变得很奇怪)。
通用运算符约束已经讨论过几次,但从未进入语言。
您可以使用 dynamic
作弊,但这涉及 "boxing",因此会有一些不小的开销。或者 MiscUtil.