gpt4 book ai didi

C#/XNA 扩展设置实例属性

转载 作者:行者123 更新时间:2023-11-30 15:48:17 24 4
gpt4 key购买 nike

我正在扩展 Vector2 类。在我的主要代码中,我可以说

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

但在我的扩展中,我不能。

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

v.SetToThree() 不会改变 v。当我逐行查看代码时,扩展向量的 X 方向更改为 3,但在扩展完成并继续主要代码后,v 根本没有改变。扩展方法 SetToThree 有没有办法改变 v 的值?

最佳答案

虽然它看起来像一个实例方法,但它像静态方法一样运行 - 所以 arg0 (this) 不是 ref - 它是按值传递的,因此您正在改变该结构的副本。因为您不能在扩展方法的第一个参数上使用ref,所以您将不得不返回它:

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

并使用:

v = v.SetToThree();

所以可能不值得...

关于C#/XNA 扩展设置实例属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2747997/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com