C# 保持对象引用

C# 保持对象引用,c#,coding-style,C#,Coding Style,鉴于下面的设置和代码片段,您能想出什么理由来使用其中一个而不是另一个?我有两种观点,但我很好奇别人怎么想 设置 片段一 var foo = new Foo(); foo.Bar(); 片段二 new Foo().Bar(); 如果您不打算使用Foo实例来进行更多的调用,那么我可能会选择第二个实例,但我看不出会有任何实际的区别,除非调用非常频繁(但我并不认为这种构造很可能发生这种情况).我喜欢第二个,因为它清楚地表明我根本不需要对象引用 我怀疑您将此作为实例方法的动机。 如果我只更新对象以调用

鉴于下面的设置和代码片段,您能想出什么理由来使用其中一个而不是另一个?我有两种观点,但我很好奇别人怎么想

设置

片段一

var foo = new Foo();
foo.Bar();
片段二

new Foo().Bar();

如果您不打算使用Foo实例来进行更多的调用,那么我可能会选择第二个实例,但我看不出会有任何实际的区别,除非调用非常频繁(但我并不认为这种构造很可能发生这种情况).

我喜欢第二个,因为它清楚地表明我根本不需要对象引用

我怀疑您将此作为实例方法的动机。 如果我只更新对象以调用其中一个方法,然后放弃它,那么应该使用一个以类依赖项为参数的静态方法(尽管我不喜欢静态)


什么导致了一个更有趣的问题:如果你根本不依赖内部状态,那么你只是一个函数,因此我认为你属于某个实体,而不属于你自己的类。

第一个版本意味着你可以在调用
Bar()
之前更容易地在调试器中检查
foo

第一个版本还意味着您将一个名称与对象相关联(当然,它实际上是变量的名称,但显然存在一种心理关联),这有时会很有用:

var customersWithBadDebt = (some big long expression)
customersWithBadDebt.HitWithBaseballBat();

(some big long expression).HitWithBaseballBat();

如果以上两个原因都不适用,当然可以选择单行版本。这是个人品味,然后应用到每个特定的上下文中。

我选择第一个片段

如果要使用foodobar()类,那么Bar2()会更容易


另外,它更容易调试,因为您可以观看foo,这是代码片段2无法做到的。这是我一直回避的一个元素。有什么功能上的区别吗?GC是否比另一个更容易清除?检查每种情况下发出的IL可能会有帮助。我怀疑GC是否会发现其中一个比另一个更难处理;这可能更多地取决于您对存储在第一个示例中的引用所做的选择。当在调试器中运行时,它可能会在意-我怀疑它会保留所有“真正的变量”,直到方法结束或至少其作用域结束。@AakashM:我检查了发出的IL代码,我能看到的唯一区别与代码中的几乎相同;在第一个示例中,创建了一个局部变量,对Foo实例的引用存储在其中。只是想看看其他人的喜好是什么。
(some big long expression).HitWithBaseballBat();