【发布时间】:2018-01-11 15:53:26
【问题描述】:
我的问题特别涉及使用来自另一个类的某个值初始化属性的好处(或相反),而不是简单地使用属性 get 的值。
例如,是否实现:
public class Foo
{
public object Bar { get; }
public Foo()
{
Bar = OtherClass.Bar;
}
}
比这个实现有任何实际优势:
public class Foo
{
public object Bar { get => OtherClass.Bar; }
}
我之所以问,是因为在我看来,第二种实现更容易阅读,显然更简洁,但我不知道除了行数之外,两者之间是否有任何可衡量的差异。
我能找到的唯一类似问题是C# Is there any benefit to assigning class properties in the class constructor?,这并没有回答我的问题。
【问题讨论】:
-
在第一个例子中,Bar 的值被初始化一次,然后就永远不会改变。在第二个示例中,每次查询 Bar 时,它都会重新查询 OtherClass.Bar 中的值,因此如果更改了,那么您将返回不同的值。
-
即使
OtherClass.Bar是只读的,我也有一个重要的区别,为什么我会避免选择第二个选项:您正在创建对OtherClass的引用,它可以使一个可能并且应该的对象保持活动状态由 GC 收集。 -
@InBetween 在显示的代码中
OtherClass必须是一个类,所以Bar是一个静态成员。没有任何东西在其中一个而不是另一个中保持活力。 -
@Servy 是的,如果其他类是静态的,我同意。尽管命名约定和显示的代码似乎暗示了它,但这不是事实,这就是为什么我声明它可能保持不应该的东西。这只是他应该考虑的事情。
-
@InBetween 这不是关于命名约定,而是关于范围内没有变量
OtherClass的事实。由于没有名为OtherClass的变量,它编译的唯一方法是它是一个静态类。
标签: c# constructor properties