在我學unity的時候,發現了2個不同的extension Method的方法@@
在網上看到別人用的都是方法一,但是我認為方法二的寫法更為簡潔~想請問一下大家方法二比起方法一在效能上會有問題麼@@?
Vector2 v2 = Vector2.zero;
//方法一
public static Vector2 SetX(this Vector2 vector, float x)
{
return new Vector2(x, vector.y);
}
//使用方法
v2 = v2.SetX(5);
//結果
v2 = (5,0)
//方法二
public static void SetX(this ref Vector2 vector, float x)
{
vector = new Vector2(x,vector.y);
}
//使用方法
v2.SetX(5);
//結果
v2 = (5,0)
若是依你舉的例子
ref傳入的參數,是直接傳入該參數占用的記憶體位址,並直接對其做處理
return則是,你建立了一個新的記憶體位址,在做完動作後將資料位址回傳給呼叫者
Vector2 v2 = Vector2.zero;
//方法一
public static Vector2 SetX(this Vector2 vector, float x)
{
return new Vector2(x, vector.y);
}
//使用方法
SetX(v2,5); //v2沒被改變,v2一樣還是 v2 = Vector2.zero;
v2 = SetX(v2,5); //需要將SetX回傳的資料,指定回v2
//方法二
public static void SetX(this ref Vector2 vector, float x)
{
vector = new Vector2(x,vector.y);
}
//使用方法
SetX(ref v2,5); //v2直接被改動
這個問題,認真來說。如真要討論效能問題的話。
理論上來說,直接變值一定會比傳遞變值還要好。
但實際上來說,其實兩者的差異並不在於效能上的問題。
而是記憶體的使用問題。
在討論效能問題之前,得先說說為何有這樣的寫法。及這種寫法的用意到底是為什麼。
大多數來說,都是不外乎為了「規劃性」「可攜性」「變動性」及「繼承性」
你或許可以發現。並沒有是因為「效能」
當然,這兩種寫法的「效能」還是有其差異的。
只是這樣的差異會因為使用的行為上。變成並沒那麼的需要去做比對性。
所以就單純你的問題而言來看。原則上第二種寫法會比第一種寫法的效率好。
雖然我對內部都是 new 的方式持保留態度就是了。
只是我會給你的答案是。「無法給你確定的答案」
因為並無法這樣去做說明。