局部变量与私人领域的效率

时间:2017-12-01 09:18:31

标签: c# variables methods scope

是否有关于何时何时超越另一个的经验法则?

我好奇,因为我在这里遇到了两难,我有一个非常常用的方法,返回一个相当大的自定义类类型。我想知道在一个字段中保存这个自定义类的实例是否会更便宜,然后在方法中每次更改并返回它,而不是像我有一个新类一样创建一个全新的对象每次在方法中创建的实例。

2 个答案:

答案 0 :(得分:1)

返回新创建的类实例和返回字段之间的主要区别是巨大的:在后一种情况下,实例是共享的,因为所有客户端都接收到指向同一实例的指针。这意味着:每当任何客户端(或实例的原始创建者)在实例中更改某些内容时,所有客户端现在都将看到所有这些更改。在前一种情况下,所有实例都不同,并且更改仅影响当前客户端。

因此,请仔细查看需求并找出所需的行为。弄错他们会产生毁灭性的影响。

答案 1 :(得分:0)

你似乎要求的是一个所谓的懒惰领域。您将其声明为System.Lazy<>,如此

private System.Lazy<YourClass> mYourClassInstance;

...

mYourClassInstance = new System.Lazy<YourClass>(() => new YourClass());

然后你可以通过

获取实例
mYourClassInstance.Value

您想要的任何地方,但价值(实例)只创建一次。