Можем ли мы перегрузить объект Point в C #, чтобы он поддерживал double? - PullRequest
2 голосов
/ 20 мая 2010

Я рисую некоторые графики, используя объект Point, и я хочу установить его так это поддерживает удваивается как его параметры. Я работаю над Visual C #, WindowsConsoleApplication

Спасибо.

Ответы [ 3 ]

6 голосов
/ 20 мая 2010

Вы можете просто использовать PointF. Все System.Drawing поддерживают операции с плавающей запятой. Почему бы не использовать их? В противном случае, если вы действительно хотите использовать double s и передавать их целочисленным функциям рисования, вам нужно будет создать собственную структуру. Что-то на этот счет:

struct MyPoint {
 public double X{get;set;}
 public double Y{get;set;}

 public MyPoint(double x, double y) {
   X = x;
   Y = y;
 }

 public implicit operator Point() {
  return new Point(X, Y);
 }
}

Это очень усеченная реализация, если вы посмотрите на исходные метаданные Point (перейдя к определению), вы увидите все переопределения и операторы, которые вам нужно реализовать.

Кроме того, вы можете заметить, что Point может неявно преобразовывать в PointF, но не наоборот. Это не поддерживается из-за возможной потери точности. На вашем месте я бы переосмыслил дизайн, так как он, кажется, идет вразрез с лучшими практиками использования дизайнеров API.

2 голосов
/ 20 мая 2010

Встроенная Point структура использует int, а PointF использует float, но вы можете сделать свой собственный, который использует double.

0 голосов
/ 20 мая 2010

Нет, перегрузка точечного объекта невозможна.

Точка - это в основном структура, поэтому она не поддерживает перегрузку.

Лучше создать свой собственный класс, который ведет себя так же, как точка.

Надеюсь, это поможет!

...