假設有一個8-16字節的結構Foo
。它有一個靜態方法來將Add()
的所有值賦給另一個結構,並且性能是最重要的。我見過許多靜態方法,像下面這樣:靜態方法應該修改一個對象還是返回一個新對象
public static Foo Add(Foo fooA, Foo fooB)
{
var newVar = fooA.Var + fooB.Var
return new Foo(newVar);
}
我測量,它可以製成僅引用參數更快:
public static Foo Add(ref Foo fooA, ref Foo fooB)
{
var newVar = fooA.Var + fooB.Var;
return new Foo(newVar);
}
很公平。但是它會混淆如果我避免創建一個新的實例,而是修改第一個參數?
public static void Add(ref Foo fooA, ref Foo fooB)
{
fooA.Var += fooB.Var;
}
我一直沒能雄辯,我想制定我的問題,但我希望這可以理解。
編輯: 或者,如果需要這樣的東西,該方法不應該是靜態的。這是一個正確的斷言嗎?
我明白'ref'是什麼。第三種情況是最快的,因爲我避免分配任何額外的內存。我想我的問題是:我應該保持靜態,還是作爲實例方法更好? –
只要對或錯都沒有關係。這一切都取決於你的設計! –
我試圖將我的設計基於人們期望的東西,而不是某種模糊的東西,因此我在這裏問了一個問題。 –