我有下面这段 C++ 代码,它是表示一个点的模板类。我希望将其翻译成 C#:
template <class T>
class Point
{
public:
T x;
T y;
T z;
template<typename U> explicit Point(const Point<U> &p)
: x((T)p.x), y((T)p.y), z((T)p.z)
{
}
}
这段代码可以将给定类型的点明确地转换为另一种类型的点。例如,您可以像以下方式使用它(尽管我对语法不是100%确定,但我理解概念):
Point<float> p;
Point<int> q = (Point<int>)p;
我应该如何在C#中启用类似的功能?到目前为止,我有以下代码:
public class Point<T>
{
public T X { get; set; }
public T Y { get; set; }
public T Z { get; set; }
// Constructors exist that accept X, Y, and Z as parameters
public static explicit operator Point<U>(Point<T> p)
{
}
}
这段代码出现了错误,提示“U”未定义。这是有道理的...但是我应该在哪里定义“U”呢?我的方法不正确吗?
与这个问题的区别在于,我只是通过强制类型转换来改变泛型类的底层类型,而不是试图将一个泛型类转换为具有相同底层类型的不同泛型类。
U
作为通用参数吗?你可以用实际类型替换U
。当然,你只能进行有限数量的转换类型。 - gunr2171