2011-09-02 74 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) 
    { 
    } 

不幸的是沒有方法來創建自定義的語法:(