2010-04-30 155 views
3

我正在對Vector2類進行擴展。在我的主代碼中,我可以說C#/ XNA擴展設置實例屬性

Vector2 v=new Vector2(); 
v.X=2; 

但是在我的擴展中,我不能。

public static void SetToThree(this Vector2 vector) 
{ 
    vector.X=3;  
} 

v.SetToThree()不改變訴 當我通過代碼一行一行,在擴展向量的X方向被改變爲3,但擴展結束後,主代碼繼續,v一直沒有改變。 擴展方法SetToThree是否有任何方法來更改v的值?

回答

4

即使它看起來就像一個實例方法,它的運作就像一個靜態方法 - 所以arg0this)不ref - 它是通過按值,因此你是變異的結構的副本 。既然你無法上的擴展方法的第一個參數使用ref,你將不得不return它來代替:

public static Vector2 SetToThree(this Vector2 vector) 
{ 
    vector.X=3; 
    return vector; 
} 

及用途:

v = v.SetToThree(); 

所以可能不值得..

+0

或者,如果可能,使Vector類(應該通過引用傳遞)而不是Struct(傳遞值)。 – 2010-05-02 13:31:28

+0

@Andy - 這是一種常見的現有XNA類型。 – 2010-05-02 17:29:00