【发布时间】:2013-01-15 18:02:35
【问题描述】:
在 C++ 中,您可以编写如下代码:
template<class T>
T Add(T lhs, T rhs)
{
return lhs + rhs;
}
但是,你不能在 C# 中做这样的事情:
public static T Add<T>(T x, T y) where T : operator+
{
return x + y;
}
有什么原因吗?我知道它可以通过反射来完成(通用Add 带有对象,然后对它进行类型检查),但这效率低下并且不能很好地扩展。那么,为什么?
【问题讨论】:
-
这看起来像 stackoverflow.com/questions/756954/… 的副本
-
@neontapir 接受的答案使用反射。我提到我知道可以这样做,但我不想这样做。
-
我认为在第二段中您的意思是您不能在 C# 中执行此操作,即问题是“为什么没有运算符重载类型约束?” (顺便说一句,我不知道答案)。
-
c++ 泛型与 c# 模板不同,并且没有相同的行为。 “为什么”不是堆栈溢出的好问题。
标签: c# .net generics cil cil-metadata