У меня есть следующий код для С++ в шаблонном классе, представляющем точку. Я хотел бы перевести его на С#:
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;
Как я могу включить эквивалент этого в С#? Пока у меня есть:
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
фактическим типом. Конечно, у вас будет только ограниченное количество типов конверсий, которые вы можете сделать. - person gunr2171   schedule 20.02.2019