настраиваемые аргументы - PullRequest
       27

настраиваемые аргументы

0 голосов
/ 03 сентября 2011

Я создал очень простой вектор - класс оси в c #.

Обычно это работает как MyAxis abc = new MyAxis(p,x,y,z); (точка p) и (x, y, z удваивается);

Однако я хочу назвать конструктор по-своему, например,

MyAxis abc = new MyAxis([0 0 0],[0 0 1]); // Looks like MatLab;

Я знаю, что могу сделать это с помощью строк или списков или чего-то еще, но я хочу избежать создания новых объектов и передавать их конструктору.

Я хочу также избежать чего-то вроде ..new MyAxis(a,b,c,d,e,f) или ...new MyAxis(new Point(x,y,z),...);

Есть ли такая возможность в C #?

Ответы [ 5 ]

1 голос
/ 03 сентября 2011

Вы можете попробовать что-то вроде этого:

    MyAxis abc = new MyAxis(new[] { 0, 0, 0 }, new[] { 0.1, 0.2, 1.1} );

А затем в конструкторе MyAxis просто сделайте что-то вроде этого:

    public MyAxis(new int[] points, new double[] doubles)
    {
     Point p = new Point(points[0], points[1], points[2]);

     double x = doubles[0], 
     y = doubles[1], 
     z = doubles[2];

     ...

     }

Вы также можете создать несколько конструкторов, если хотите.

    public MyAxis(int a, int b, int c, int d, int e, int f)
    {
    }

    public MyAxis(Point a, Point b)
    {
    }

    public MyAxis(Point p, double[] doubles)
    {
    }

и т. Д.

К сожалению, нет способа создать собственный синтаксис: (

1 голос
/ 03 сентября 2011

Вы хотите изменить синтаксис, который использует C #, но это невозможно. Я считаю, что самое близкое, что вы получите, это что-то вроде

MyAxis abc = new MyAxis(new []{0,0,0}, new[]{0,0,1});

Но это не совсем то, что вы ищете. Я думаю, что это лучшее, что вы получите, хотя.

1 голос
/ 03 сентября 2011

С этим мало что можно сделать, если вы не передадите массив значений типа double / ints

new MyAxis(new int[]{1, 2, 3},new int[]{1, 2, 3});

или, как вы сказали, новый объект, такой как new Point (x, y, z) (я знаю, вы сказали, что хотели этого избежать, но работая с языком OO, он «работает»)

new MyAxis (new point(1, 2, 3), new point(5, 6, 7));
1 голос
/ 03 сентября 2011

Как насчет того, чтобы ваш конструктор выглядел MyAxis(double[] p, double[] v)

Затем вы можете инициализировать ваш объект следующим образом:

MyAxis abc = new MyAxis({0, 0, 0},{0, 0, 1}); // Looks _almost_ like MatLab;

Ваш конструктор, очевидно, должен проверить, что массивы содержат 3 элемента (или, по крайней мере, количество элементов равно и поддерживают N размерных векторов)

0 голосов
/ 03 сентября 2011

Будет ли это работать для вас?

public someClass( int[] input1, int[] input2 ) 

someClass temp = new someClass(new int[] { 1, 0, 1 }, new int[] { 1, 0, 1 });
...