定制的论点

时间:2011-09-02 21:33:16

标签: c# function arguments

我在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 个答案:

答案 0 :(得分:1)

如何让构造函数看起来像MyAxis(double[] p, double[] v)

然后您可以像这样初始化您的对象:

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

你的构造函数显然应该验证数组包含3个元素(或至少元素数量相等并支持N维向量)

答案 1 :(得分:1)

您希望更改C#使用的语法,但这是不可能的。我相信你得到的最接近的是

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

但这并不是你想要的。我认为这是你能得到的最好的。

答案 2 :(得分:1)

除非你传入一个双打/整数数组

,否则你无法做到这一点
new MyAxis(new int[]{1, 2, 3},new int[]{1, 2, 3});

或者像你说的新对象如新点(x,y,z)(我知道你说你想避免这种情况,但是使用OO语言,它确实“有用”)

new MyAxis (new point(1, 2, 3), new point(5, 6, 7));

答案 3 :(得分:1)

您可以尝试这样的事情:

    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)
    {
    }

不幸的是,没有办法创建自定义语法:(

答案 4 :(得分:0)

这会对你有用吗?

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

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