2015-05-07 2 views
1

C#: Как инициализировать пользовательский класс, как показано ниже?Как инициализировать пользовательский класс следующим образом?

Point3 Last = { 0, 0, 0 }; 

Я понимаю, что я могу перегрузить оператор присваивания «=», но я хочу, чтобы иметь возможность назначать такие вещи, как это:

Point3 p1 = { 3, 4, 5 }; 
Point3 p2 = p1; 

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

То, что я смотрю на это следующее:

public static Point3 operator =(Point3 P, double[] Vs) 
    { 
     return new Point3(Vs[0], Vs[1], Vs[2]); 
    } 

Любые указатели?

+0

Создать неявное преобразование между point3 и ИНТ []. Возможно, вам придется использовать 'Point3 p1 = new [] {3, 4, 5}'. –

+0

Если 'Point3' не реализует IEnumerable, я не думаю, что вы можете делать то, что вы просите. Возможно, вы сможете сделать что-то еще, например «Point3 Last = new [] {0, 0, 0}», а затем оператор неявного преобразования из массива. –

+0

Следует отметить, что оператор присваивания не может быть перегружен в соответствии с статьей [= Оператор (ссылка на C#)] (https://msdn.microsoft.com/en-us/library/sbkb459w.aspx) –

ответ

4

Вы можете создать неявный оператор вроде этого:

public class Point3 
{ 
    public static implicit operator Point3(int[] ints) 
    { 
     return new Point3(); 
    } 
} 

который может быть вызван с помощью этого:

Point3 p1 = new[] { 1, 2, 3 }; 

Обратите внимание, что вы явно нужно создать массив и не может использовать инициализатор выражение. В основном то, что вы делаете, интерпретирует правую часть и обеспечивает неявное преобразование между этим и вашим пользовательским типом. Затем вы можете определить, как именно это преобразование должно быть обработано.

Implicit on MSDN

Смежные вопросы