2011-09-02 76 views
0

我在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

你并不需要“自定义参数”,你需要创建对象的自定义语法 - 答案是“ no“ –

回答

1

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

然后,您可以初始化你的对象是这样的:

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

你的构造显然应该确认该数组包含3个elemnts(或至少元素的数量是相等的并且支持N维向量)

+0

这个语法对我不起作用,你需要在每个传递的数组前面加上新的[],以便编译器很高兴。 – Kevek

+0

你可能是对的...你可以使用double [] a = {0,0,1},但它只能用于这样的初始化命令。最近太多的JavaScript ... – Variant

1

您正在寻找更改C#使用的语法,但这是不可能的。我相信最接近你会得到像

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

但是,这不是你想要的。不过,我认为这是最好的。

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)); 
0

这对你有用吗?

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

someClass temp = new someClass(new int[] { 1, 0, 1 }, new int[] { 1, 0, 1 }); 
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) 
    { 
    } 

不幸的是没有方法来创建自定义的语法:(