2010-04-30 116 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