gpt4 book ai didi

c# - 如何最好地修改和返回 C# 参数?

转载 作者:太空狗 更新时间:2023-10-29 22:04:52 25 4
gpt4 key购买 nike

我需要使用一个已经设置了多个属性值的 Widget。我需要更改小部件的名称。我倾向于选项 3,但我很难说清原因。

public void Do(Widget widget) { // 1
widget.Name = "new name";
}

public void Do(ref Widget widget) { // 2
widget.Name = "new name";
}

public Widget Do(Widget widget) { // 3
widget.Name = "new name";
return widget;
}

我想玩 Devil's Advocate 并提出一些问题并收集回复,以帮助我解释为什么我被选项 3 吸引。

选项 1: 为什么只修改传入的 Widget?您只是“返回”一个对象。为什么不直接使用传入的对象呢?

选项 2: 为什么返回 void?为什么不在签名中传达您将使用指向参数对象本身的实际内存指针?

选项 3:返回的对象与传入的对象相同,这对您来说不奇怪吗?

最佳答案

选项 1:这是最常见的方法 - 如果您不想修改引用,则不需要 ref 本身。确保您适本地命名您的方法,以便期望传递的对象确实被修改。

选项 2:这仅在您想要更改传递的引用本身时有用,即创建一个新的 Widget 实例或设置指向现有小部件的引用(如果您希望在实例都具有相同属性的情况下保持较低的实例总数,这可能很有用,请参阅 Flyweight pattern ,通常返回的小部件在这种情况下应该是不可变的,您将使用一个工厂)。在您的情况下,这似乎不合适。

选项 3:这允许一种流畅的“构建器”方法 - 也有其好处,即对小部件的更改链接,有些人认为这更具表现力和 self 记录。另见 Fluent interface

关于c# - 如何最好地修改和返回 C# 参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7517697/

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