У меня есть следующий код для 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?Мой подход неверен?
Разница между моим вопросом и вопросом здесь заключается в том, что я просто меняю базовый тип базового класса с помощью приведения ... не пытаясь изменить одинуниверсальный класс в другой универсальный класс с тем же типом подложки.