gpt4 book ai didi

c# - 静态方法应该修改对象还是返回一个新对象

转载 作者:太空宇宙 更新时间:2023-11-03 13:38:04 24 4
gpt4 key购买 nike

假设有一个 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;
}

我无法像我希望的那样 Eloquent 地阐述我的问题,但我希望它会被理解。

编辑:或者,如果需要这样的东西,该方法一开始就不应该是静态的。这是一个正确的断言吗?

最佳答案

这并不令人困惑,但您会得到不同的结果。在第二种情况下,您正在更改其中一个输入,而您可能不希望这样。

此行为称为 Side effect有时这真的很痛苦。这是人们使用函数式编程(副作用更少)而不是命令式语言的一个很好的理由。

关于c# - 静态方法应该修改对象还是返回一个新对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18059585/

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